【发布时间】:2015-04-24 05:48:00
【问题描述】:
我想限制子进程中的资源访问。比如-limit http downloads、disk io等。如何扩展这个基本代码来实现呢?
请分享一些基本的代码示例。
pool = multiprocessing.Pool(multiprocessing.cpu_count())
while job_queue.is_jobs_for_processing():
for job in job_queue.pull_jobs_for_processing:
pool.apply_async(do_job, callback = callback)
pool.close()
pool.join()
【问题讨论】:
-
您想限制资源访问的方式是使用
Lock或Semaphore?有什么理由不只使用multiprocessing.Lock/multiprocessing.Semaphore? -
@dano 如何将 multiprocessing.Lock() 或 Semaphore() 传递给池?共享全局锁的选项有哪些?
-
限制资源访问的需要并不意味着进程池需要任何同步,而是工作任务。你为什么不确切地解释你想要完成什么?
-
@MichaelFoukarakis 为什么?并不重要,重要的是如何?。我可以回答你为什么?因为随机 io 比顺序 io 慢 - 我回答你的问题了吗?请参阅统计数据 - goo.gl/TbC2xp。 Memcache 的工作方式不同于磁盘和硬盘,而不是闪存(它通常被命名为磁盘,但它不是磁盘)或 www 服务器 - 有些需要信号量有些不需要 - 无论我需要什么,都可以像许多其他人一样学习 Python 中多处理的全局信号量模式。
-
@MichaelFoukarakis WWW 服务器需要信号量以保持礼貌,并且不会拒绝具有大量并行请求的站点 - 它不受设计限制,而是受互联网道德限制。
标签: python python-multiprocessing