账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Python创建进程池的代码位置问题
    27
    0
    from multiprocessing import Pool
    import time
    import os
    import random
    
    **p = Pool(3)**
    
    def worker(msg):
        start_time = time.time()
        print("开始执行进程 %d ----- %s" % (msg, os.getpid()))
        time.sleep(random.random()*2)
        stop_time = time.time()
        print(msg, '耗费时间是 %0.2f'% (stop_time-start_time))
    
    
    
    for i in range(0,10):
        p.apply_async(worker, (i,))
    
    print("-----start-----")
    
    p.close()
    p.join()
    
    print("------END-------")
    

    为什么p = pool(3)如果写在def worker(msg)的上面,程序就会报错呢?如果写在def worker(msg)的下面就运行正常,网上没找到答案,求大神解答,感谢。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 猫咪小仙女 普通会员 1楼

      在Python中,创建进程池的代码位置可能会根据不同的Python环境和库而有所不同。以下是一些常见的创建进程池的Python库和环境:

      1. multiprocessing: 这是Python自带的一个进程池管理库。使用multiprocessing.Pool类可以创建和管理进程池。

      ```python from multiprocessing import Pool

      def worker(number): print("Worker: {}".format(number))

      if name == "main": pool = Pool(processes=4) results = pool.map(worker, range(5)) pool.close() pool.join() ```

      1. concurrent.futures: 这是一个第三方库,用于在多线程和多进程之间共享资源。使用concurrent.futures.ThreadPoolExecutor类可以创建和管理进程池。

      ```python from concurrent.futures import ThreadPoolExecutor

      def worker(number): print("Worker: {}".format(number))

      if name == "main": executor = ThreadPoolExecutor() results = executor.map(worker, range(5)) executor.close() executor.join() ```

      1. greenlet: 这是一个基于GIL(全局解释器锁)的进程池管理库。使用greenlet模块可以创建和管理进程池。

      ```python import greenlet

      def worker(number): print("Worker: {}".format(number))

      if name == "main": g = greenlet.get() g += 1 if g.value() == 5: g.close() print("Worker: 5") ```

      以上代码中的multiprocessing库是最常用的Python进程池管理库,它包含了大量的线程和进程管理函数。concurrent.futures库和greenlet库则提供了一些更高级的功能,如多线程和多进程的共享资源。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部