[英]Store the results of a multiprocessing queue in python
我正在尝试使用多处理队列存储多个 API 请求的结果,因为 API 一次无法处理超过 5 个连接。
def worker(input_queue, stop_event):
while not stop_event.is_set():
try:
# Check if any request has arrived in the input queue. If not,
# loop back and try again.
request = input_queue.get(True, 1)
input_queue.task_done()
except queue.Empty:
continue
print('Started working on:', request)
api_request_function(request) #make request using a function I wrote
print('Stopped working on:', request)
def master(api_requests):
input_queue = multiprocessing.JoinableQueue()
stop_event = multiprocessing.Event()
workers = []
# Create workers.
for i in range(3):
p = multiprocessing.Process(target=worker,
args=(input_queue, stop_event))
workers.append(p)
p.start()
# Distribute work.
for requests in api_requests:
input_queue.put(requests)
# Wait for the queue to be consumed.
input_queue.join()
# Ask the workers to quit.
stop_event.set()
# Wait for workers to quit.
for w in workers:
w.join()
print('Done')
我查看了线程和池的文档,但缺少一个步骤。 所以上面的运行并且所有的请求都会得到一个 200 状态码,这很棒。 但是我存储请求的结果要使用吗?
谢谢你的帮助山
我相信你必须做一个队列。 代码可能有点棘手,您需要阅读多处理模块。 通常,对于多处理,所有变量都会为每个工作人员复制,因此您不能执行诸如附加到全局变量之类的操作。 因为这将被复制,而原件将保持不变。 有一些函数已经自动合并了工作者、队列和返回值。 就个人而言,我尝试编写我的函数来使用 mp.map,如下所示:
def worker(*args,**kargs):
#do stuff
return 'thing'
output = multiprocessing.Pool().map(worker,[1,2,3,4,5])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.