我正在尝试编写一行 shell 代码来告诉我队列中有多少个作业。
该命令qstat将返回具有以下属性的作业列表:作业 ID、名称、用户、时间使用队列名称
该命令qstat(1B)在手册页中进行了标记。
我尝试计算我正在运行的作业数量grep:
grep -c my_username | qstat
Run Code Online (Sandbox Code Playgroud)
my_username据我了解,这应该计算qstat 输出中出现的次数。但这不起作用。有什么想法我哪里出错了吗?
java.util.LinkedList 中 addLast()、add() 或 Offer() 等效方法的渐近复杂度是多少?是 O(N) 还是 O(1)?也就是说,LinkedList 内部是保留一个指向其尾部的指针,还是从头部开始遍历链表?
无论哪种方式,您将如何利用 FIFO 队列具体实现,该实现在 Offer() 方法中效率更高,但仍使用标准库?(没有自定义队列实现)。LinkedList 是一个好的选择还是其他什么?
我意识到这个问题之前可能有人问过,但搜索了很长一段时间后我找不到答案。
我想实现一个线程安全的队列映射。
我打算从一张空地图开始。如果该键不存在,我想用新的队列创建一个新的映射条目。如果该键确实存在,我想添加到队列中。我建议的实现如下:
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
public class StackOverFlowExample {
private final Map<String, ConcurrentLinkedQueue<String>> map = new ConcurrentHashMap<>();
public void addElementToQueue(String key, String value){
if (map.containsKey(key)){
map.get(key).add(value);
}
else{
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
queue.add(value);
map.put(key, queue);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我担心的是,当多个线程尝试向 Map 添加新值时,第一个线程将使用新的 Queue 放置一个新的 Map 条目,第二个线程将等待,然后为该键放置一个新的 Queue,而不是添加到队列。我的并发/并发 API 知识充其量也很有限。也许并发是为了避免这种情况?非常感谢您的建议。
我正在编写一个程序来确定用户输入的字符串是否是回文。程序可以编译,但是当打印输出时,所有字符串都被确定为回文,即使它们不是。我读了不同的教科书,检查和调试了代码数十次,查看了其他类似的回文问题,但我仍然迷失了。
我的代码如下:
#include <iostream>
#include <stack>
#include <queue>
#include <string>
using namespace std;
int main (void)
{
stack <char> s;
queue <char> q;
string letter;
int length;
cout<<"Please enter a series of characters."<<endl;
getline (cin, letter);
length = letter.size();
for (int i=0; i<length; i++)
{
q.push(i);
s.push(i);
}
bool isPalindrome = true;
while (isPalindrome==true && (!s.empty() && !q.empty()))
{
if (s.top() != q.front())
{
isPalindrome = false;
}
else
{
q.pop();
s.pop();
}
}
if(isPalindrome==false && (s.empty() && q.empty()))
{ …Run Code Online (Sandbox Code Playgroud) 我有一个完整的 Deque Array 类,如下所示:
from collections import deque
import ctypes
class dequeArray:
DEFAULT_CAPACITY = 10 #moderate capacity for all new queues
def __init__(self):
self.capacity = 5
capacity = self.capacity
self._data = self._make_array(self.capacity)
self._size = 0
self._front = 0
def __len__(self):
return self._size
def __getitem__(self, k): #Return element at index k
if not 0 <= k < self._size:
raise IndexError('invalid index')
return self._data[k]
def isEmpty(self):
if self._data == 0:
return False
else:
return True
def append(self, item): #add an element to …Run Code Online (Sandbox Code Playgroud) 我需要帮助来使用 Laravel 分派作业,似乎系统在使用队列作业时尝试序列化闭包,因此出现此错误。
我该如何解决这个问题?我也尝试过这个包
https://github.com/jeremeamia/super_closure
但它在我的情况下不起作用。
这是我的代码:
在控制器 FacebookController 中:
public function getPosts(\SammyK\LaravelFacebookSdk\LaravelFacebookSdk $fb) //get all post of logged user
{
dispatch(new SyncFacebook($fb));
}
Run Code Online (Sandbox Code Playgroud)
以及要调度的作业:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Session, DB, Carbon\Carbon, Auth;
use App\{
User, Reaction, Post, Synchronisation
};
class SyncFacebook implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $fb;
public function __construct($fb)
{
$this->fb = $fb;
}
public function handle()
{
set_time_limit(0);
$user = Auth::user();
try { …Run Code Online (Sandbox Code Playgroud) 我正在使用Laravel 5.6,应该为某些功能创建功能测试。在某些条件下,如果从第一个作业执行第二个作业,我如何测试两个作业的调度。
它看起来像这样:
class FirstJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
dispatch(new SecondJob());
}
}
Run Code Online (Sandbox Code Playgroud)
顺序断言看不到第二个作业。
Queue::assertPushed(FirstJob::class);// 断言
Queue::assertPushed(SecondJob::class);// 未断言
我目前在 laravel 中有一个 Cron,它以块的形式获取数据并调用 API。
流程如下
1. Cron runs every 5 minutes
2. Takes 80 data in chunks
3. Loop it through and call an API for 80 times and takes the next 80 in the next cron cycle
Run Code Online (Sandbox Code Playgroud)
此方法非常慢,如果表中有 10000000 条记录,则需要处理很多次。我之前使用过 1000 个块,这破坏了我的系统并显示“打开文件太多”异常,为此我已将块从 1000 减少到 80。
我知道我正在做的事情的设计非常糟糕。
我需要重新构建当前模型并构建可以并行处理的东西。至少500-1000个数据并行处理。
我如何在 Laravel 中做到这一点。是否可以通过 PHP 实现,还是我必须考虑像 nodejs 这样的选项?如果可以使用队列,请帮助我。即使我使用队列我能够通过它进行并行处理吗?
更新
现在我尝试使用 Laravel 队列
该命令在后台运行
php /Users/ajeesh/PhpstormProjects/untitled3/open-backend-v2/artisan queue:work database --tries=1 --timeout=56
Run Code Online (Sandbox Code Playgroud)
我的作业被处理了 3 次。我不明白为什么。
有人可以在这里提出解决方案吗?
我使用ActiveMQ Artemis进行数据传递,但队列中的数据不是持久的。
当我使用 artemis.cmd stop 关闭服务器并使用 artemis.cmd run 重新启动时,队列中的消息计数变为 0。
经纪人.xml:
<persistence-enabled>true</persistence-enabled>
<max-disk-usage>100</max-disk-usage>
Run Code Online (Sandbox Code Playgroud) 我正在编写一个Python程序,它同时运行从队列中获取的任务,以学习 asyncio.
通过与主线程(在 REPL 内)交互,项目将被放入队列中。每当一个任务被放入队列时,它应该立即被消耗并执行。我的方法是启动一个单独的线程并将队列传递到该线程内的事件循环。
这些任务正在运行,但只是按顺序运行,我不清楚如何同时运行这些任务。我的尝试如下:
import asyncio
import time
import queue
import threading
def do_it(task_queue):
'''Process tasks in the queue until the sentinel value is received'''
_sentinel = 'STOP'
def clock():
return time.strftime("%X")
async def process(name, total_time):
status = f'{clock()} {name}_{total_time}:'
print(status, 'START')
current_time = time.time()
end_time = current_time + total_time
while current_time < end_time:
print(status, 'processing...')
await asyncio.sleep(1)
current_time = time.time()
print(status, 'DONE.')
async def main():
while True:
item = task_queue.get()
if item == _sentinel:
break
await …Run Code Online (Sandbox Code Playgroud)