【问题标题】:Store the results of a multiprocessing queue in python在 python 中存储多处理队列的结果
【发布时间】:2020-04-26 22:52:14
【问题描述】:

我正在尝试使用多处理队列存储多个 API 请求的结果,因为 API 一次无法处理超过 5 个连接。

我找到了How to use multiprocessing with requests module?的部分解决方案

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 状态码,这很棒。但是我是否存储了请求的结果以供使用?

感谢您的帮助 山

【问题讨论】:

    标签: python multiprocessing


    【解决方案1】:

    我相信你必须创建一个队列。代码可能有点棘手,您需要阅读多处理模块。通常,对于多处理,所有变量都会为每个工作人员复制,因此您不能执行诸如附加到全局变量之类的操作。因为这将被复制,而原件将保持不变。有一些函数已经自动合并了工作者、队列和返回值。就个人而言,我尝试编写我的函数来使用 mp.map,如下所示:

    def worker(*args,**kargs):
        #do stuff
        return 'thing'
    output = multiprocessing.Pool().map(worker,[1,2,3,4,5])
    

    【讨论】:

    • 谢谢 Bobby,我尝试使用一个池,但我遇到了一个池问题,即池没有等待请​​求完成并发出另一个请求使 API 过载。但我会有另一场戏
    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2011-10-29
    相关资源
    最近更新 更多