python3 进程池中使用队列Queue

 

主要是这两行代码:

m = multiprocessing.Manager()
self.queue = m.Queue()

描述如下:

Manager()返回的管理器对象控制一个服务器进程,该进程保存Python对象并允许其他进程使用代理操作它们。

Manager()返回的管理器将支持类型列表,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Barrier,Queue,Value和Array。

 

完整代码如下:

import multiprocessing
import time


class Test:
    def __init__(self):
        self.pool = multiprocessing.Pool()
        # self.queue = multiprocessing.Queue()
        m = multiprocessing.Manager()
        self.queue = m.Queue()

    def subprocess(self):
        for i in range(10):
            print("Running")
            time.sleep(1)
        print("Subprocess Completed")

    def start(self):
        self.pool.apply_async(func=self.subprocess)
        print("Subprocess has been started")
        self.pool.close()
        self.pool.join()

    def __getstate__(self):
        self_dict = self.__dict__.copy()
        del self_dict['pool']
        return self_dict

    def __setstate__(self, state):
        self.__dict__.update(state)


if __name__ == '__main__':
    test = Test()
    test.start()

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Python ,可以使用 `multiprocessing` 库的 `Queue` 类来在进程传递信息。 首先,在主进程创建一个 `Queue` 对象,然后将该对象作为参数传递给进程的每个进程: ```python from multiprocessing import Queue, Process def worker(queue): # 从队列获取信息 message = queue.get() # 处理信息 print(message) if __name__ == '__main__': # 创建一个队列 queue = Queue() # 创建进程,并将队列作为参数传递给每个进程 with Process(target=worker, args=(queue,)) as process: # 向队列添加信息 queue.put('Hello, World!') # 等待进程完成 process.join() ``` 在进程的每个进程,可以使用 `Queue.get()` 方法从队列获取信息,并使用 `Queue.put()` 方法向队列添加信息。 注意,在使用进程队列时,应该使用 `multiprocessing` 库进程队列,而不是 `threading` 库的线程和队列。 ### 回答2: 在Python使用进程时,可以使用队列来传递信息。 首先,需要导入`multiprocessing`模块的`Pool`和`Queue`。 使用`Pool`创建进程对象,可以指定进程数。然后,使用`Queue`创建一个队列对象,用于在进程之间传递信息。 在主进程,将需要传递的信息通过`put`方法放入队列。 在子进程使用`get`方法从队列取出信息。 下面是一个示例代码: ```python from multiprocessing import Pool, Queue def worker(queue): data = queue.get() # 从队列取出信息 # 进行子进程的操作 if __name__ == '__main__': pool = Pool(processes=4) # 创建进程,指定进程数为4 queue = Queue() # 创建队列对象 for i in range(10): queue.put(i) # 向队列放入信息 pool.apply_async(worker, (queue,)) # 在进程异步执行worker函数 pool.close() # 关闭进程 pool.join() # 等待所有子进程结束 ``` 在上面的示例代码,创建了一个进程对象`pool`,队列对象`queue`以及放入队列的信息。 然后,通过`apply_async`方法在进程异步执行`worker`函数,并将队列作为参数传递给子进程。 子进程使用`get`方法从队列取出信息。 最后,关闭进程并等待所有子进程结束。 这样,就可以在Python使用队列进程传递信息了。 ### 回答3: 在Python,在进程使用队列进行信息传递的方法如下: 首先,需要导入`multiprocessing`模块的`Pool`类和`Queue`类: ```python from multiprocessing import Pool, Queue ``` 然后,创建一个共享队列对象: ```python queue = Queue() ``` 接下来,在进程的任务函数,通过将队列作为参数传递给进程的函数,在不同的进程之间进行信息传递: ```python def task_function(queue): # 在进程需要传递的信息 message = "Hello from process {}".format(os.getpid()) # 将信息放入队列 queue.put(message) # 创建进程 pool = Pool() # 向进程添加任务 pool.apply_async(task_function, args=(queue,)) # 关闭进程 pool.close() # 等待所有任务完成 pool.join() ``` 在上述代码,我们调用了`apply_async`方法向进程添加任务,并将队列作为参数传递给任务函数`task_function`。然后,我们关闭进程,并使用`join`方法等待所有任务的完成。 最后,可以通过在主进程队列获取数据来获得在进程传递的信息: ```python while not queue.empty(): message = queue.get() print(message) ``` 上述代码的`queue.empty()`方法用于判断队列是否为空,`queue.get()`方法用于从队列获取数据。 通过以上步骤,就可以在Python进程使用队列进行信息传递了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值