Python:如何实现多进程处理,同时限制运行进程的数量?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (740)

我希望同时运行多个Program.py实例,同时限制同时运行的实例数量(例如,我的系统上可用的CPU核数量)。例如,如果我有10个内核,并且总共必须运行1000次Program.py,那么在任何给定的时间内,只会创建和运行10个实例。

我尝试过使用MultiProcessing模块、多线程和队列,但我觉得没有什么可以让自己得到一个简单的实现。我最大的问题是找到一种方法来限制同时运行的进程的数量。

提问于
用户回答回答于

Basic Pool:

from multiprocessing import Pool

def do_work(val):
    # could instantiate some other library class,
    # call out to the file system,
    # or do something simple right here.
    return "FOO: %s" % val

pool = Pool(4)
work = get_work_args()
results = pool.map(do_work, work)

使用流程管理器和生产者

from multiprocessing import Process, Manager
import time
import itertools

def do_work(in_queue, out_list):
    while True:
        item = in_queue.get()

        # exit signal 
        if item == None:
            return

        # fake work
        time.sleep(.5)
        result = item

        out_list.append(result)


if __name__ == "__main__":
    num_workers = 4

    manager = Manager()
    results = manager.list()
    work = manager.Queue(num_workers)

    # start for workers    
    pool = []
    for i in xrange(num_workers):
        p = Process(target=do_work, args=(work, results))
        p.start()
        pool.append(p)

    # produce data
    # this could also be started in a producer process
    # instead of blocking
    iters = itertools.chain(get_work_args(), (None,)*num_workers)
    for item in iters:
        work.put(item)

    for p in pool:
        p.join()

    print results

热门问答

腾讯云广州一区DNS变更,需要怎么操作?

思潮澎湃轻描淡写的生活,但思潮澎湃
推荐
我也收到相关的通知了,这里分享下~ 2019年1月31日,腾讯云将对广州地区旧的基础网络DNS服务器(10.225.30.181、10.225.30.223)进行下线。在此期间,腾讯云提供最新的DNS服务器供您更新使用。 我们建议您尽快将DNS服务器配置进行更新,并且我们为您提供...... 展开详请

快照容量与费用的比例?如何关闭停用?

帅的惊动我国计算机大神
推荐已采纳
快照已于2019年1月22日0时启动正式商业化进程,商业化后所有存量快照和新产生的快照将根据快照使用的存储容量进行收费。 在快照商业化后,腾讯云仍旧会在国内主要地域为用户提供一定量的免费额度。免费额度策略如下: 免费额度覆盖范围为中国大陆地域,中国香港及海外地域暂无免费快照额...... 展开详请

语音短信,怎么才能买到深圳的号码?

推荐已采纳

您好,语音号码受运营商监管管控使用,运营商所提供的号码是专门的用途使用,当前没有深圳号码,可以关注号码池的号码状态,谢谢。

请教关于云服务的运维升级的问题?

Eli Qiao

腾讯 · 高级工程师 (已认证)

腾讯云CVM后台高级研发工程师
推荐
关于云服务的运维升级的几个问题: 1 IaaS 1.1 用户购买了IaaS,比如一个虚机;云厂商在云的运维中(例如,升级服务器),是否会升级&迁移用户的虚机到新的硬件上面;还是保留用户的虚机在老的硬件上不动,直到用户自己调整? ---- 看服务器要如何升级了,有可能迁移走,有可能...... 展开详请

对象存储怎么第三方上传视频和文件?

我是预言家你有freestyle么
推荐
只需要使用对象存储,官方提供了对应的SDK,包含demo文件,可以查看下 api文档很简单,调方法即可 php的:https://cloud.tencent.com/document/product/436/12266 javascript:https://cloud.tence...... 展开详请

无服务器云函数的cron表达式问题?

腾讯云serverless团队

腾讯云 · 产品团队 (已认证)

腾讯云无服务器云函数SCF产品
推荐
https://cloud.tencent.com/document/product/583/9708#cron-.E8.A1.A8.E8.BE.BE.E5.BC.8F.E8.AF.AD.E6.B3.95.E4.B8.80.EF.BC.88.E6.8E.A8.E8.8D.90.E...... 展开详请

所属标签

扫码关注云+社区