gpt4 book ai didi

python - 我可以同时运行两个多线程函数吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:30 25 4
gpt4 key购买 nike

我对多线程非常陌生。我的 python 脚本中有 2 个函数。一个函数 enqueue_tasks 迭代一大堆小项目,并对每个项目执行一项任务,其中涉及将项目附加到列表(我们称之为 master_list)。我已经使用 futures 实现了多线程。

executor = concurrent.futures.ThreadPoolExecutor(15) # Arbitrarily 15
futures = [executor.submit(enqueue_tasks, group) for group in grouper(key_list, 50)]
concurrent.futures.wait(futures)

我有另一个函数process_master,它迭代上面的master_list并检查列表中每个项目的状态,然后执行一些操作。

我可以使用上面相同的方法为process_master使用多线程吗?此外,我可以让它与 enqueue_tasks 同时运行吗?这意味着什么? process_master 依赖于 enqueue_tasks 中的列表,因此同时运行它们会出现问题吗?有什么办法可以延迟第二个功能吗? (也许使用time.sleep)?

最佳答案

不,这不安全。如果 enqueue_tasksprocess_master 同时运行,您可能会向 enqueue_tasks 内的 master_list 添加项目,网址为同时 process_master 正在迭代它。在迭代可迭代对象时更改其大小会导致 Python 中出现未定义的行为,因此应始终避免。您应该使用 threading.Lock 来保护向 master_list 添加项目的代码以及迭代 master_list 的代码,以确保它们从不同时运行。

更好的是,使用Queue.Queue (Python 3.x 中的queue.Queue)而不是list,它是一种线程安全的数据结构。将项目添加到 enqueue_tasks 中的 Queue 中,并从 process_master 中的 Queue获取项目>。这样 process_master 就可以与 enqueue_tasks 同时安全地运行。

关于python - 我可以同时运行两个多线程函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com