Min*_*nah 4 python message-queue python-rq
我不太了解 python rq,我刚刚开始学习它。
有一个task_a需要3分钟才能完成处理。
@job
def task_a():
time.sleep(180)
print('done processing task_a')
def call_3_times():
task_a.delay()
task_a.delay()
task_a.delay()
Run Code Online (Sandbox Code Playgroud)
据我观察,task_a将从队列中一一执行。第一个呼叫结束后,再进行下一个呼叫,依此类推。总时间为 3 分钟 x 3 = 9 分钟
如何使每个task_aincall_3_times函数并行执行?所以所花费的时间少于 9 分钟,可能是 3 分 10 秒(只是一个例子,它可能会比这更快)。
也许我需要生成 3 个 rq 工作人员,是的,它确实工作得更快并且像并行一样。但如果我需要调用它 2000 次怎么办?我应该生成 2000 个 rq 工人吗?我的意思是,必须有更好的方法来做到这一点。
如果需要调用任务 2000 次,则可以在队列中创建 2000 个作业,并且每次只有 3 个工作线程并行工作 3 个,直到所有作业完成。
工作人员的数量取决于服务器的规格。启动 2000 个工人来尝试同时并行所有工作显然是不切实际的。如果您确实需要同时处理数千个作业,您有两种选择:
选择 #2 取决于您正在执行的工作类型(I/O 或 CPU 限制)。如果它是 IO 绑定且线程安全的,请在工作函数中使用线程,否则,请使用多处理,但会增加资源依赖性。但是,如果您有资源来生成多个进程,为什么不首先增加复杂性较低的工作线程数。
总而言之,根据您的任务类型。如果它受 I/O 限制,您可以执行#1/#2。如果它受 CPU 限制,则根据服务器的规格,您的选择仅限于 #1。