python中使用多进程multiprocessing并获取子进程的返回值

python中使用多进程multiprocessing并获取子进程的返回值

Python中的multiprocessing包是一个多进程管理包,可以用来创建多进程。

multiprocessing包下的Queue是多进程安全的队列,我们可以通过该Queue来进行多进程之间的数据传递。

我们可以通过下面这段代码演示多进程的使用,并将每个进程的结果保存到queue中,最后统一进行输出。


import random
import time
import multiprocessing


def worker(name, q):
    t = 0
    for i in range(10):
        print(name + " " + str(i))
        x = random.randint(1, 3)
        t += x
        time.sleep(x * 0.1)
    q.put(t)


q = multiprocessing.Queue()
jobs = []
for i in range(10):
    p = multiprocessing.Process(target=worker, args=(str(i), q))
    jobs.append(p)
    p.start()

for p in jobs:
    p.join()

results = [q.get() for j in jobs]
print(results)

输出结果:

......
6 8
9 8
2 7
1 9
4 9
7 9
6 9
2 8
5 9
9 9
2 9
[17, 18, 18, 18, 18, 19, 20, 20, 20, 22]

Process finished with exit code 0

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python多进程可以实现并行处理,并且可以获取进程的返回值。可以使用 `multiprocessing` 模块的 `Process` 类来创建进程,并使用 `Queue` 或 `Pipe` 来在进程之间传递数据。以下是一个简单的示例代码: ```python import multiprocessing def worker(num): """进程执行的函数""" result = num * 2 return result if __name__ == '__main__': # 创建进程 p = multiprocessing.Process(target=worker, args=(10,)) # 启动进程 p.start() # 等待进程结束 p.join() # 获取进程返回值 result = p.exitcode print(result) ``` 在上面的示例代码,我们创建了一个进程执行 `worker` 函数,并且将参数 `10` 传递给该函数。在进程结束后,我们使用 `exitcode` 属性获取进程的返回值。如果进程正常结束,返回值为 0,否则返回的是进程结束时的状态码。 如果要在多个进程之间传递数据,可以使用 `Queue` 或 `Pipe`。以下是一个示例代码: ```python import multiprocessing def worker(q, num): """进程执行的函数""" result = num * 2 q.put(result) if __name__ == '__main__': # 创建进程之间共享的队列 q = multiprocessing.Queue() # 创建多个进程 processes = [multiprocessing.Process(target=worker, args=(q, i)) for i in range(5)] # 启动进程 for p in processes: p.start() # 等待进程结束 for p in processes: p.join() # 获取进程返回值 results = [] while not q.empty(): result = q.get() results.append(result) print(results) ``` 在上面的示例代码,我们创建了一个进程之间共享的队列 `q`,创建了多个进程,并将队列 `q` 作为参数传递给这些进程。在进程,我们使用 `put` 方法将结果存入队列。在主进程,我们使用 `get` 方法从队列取出结果,并将其存储在列表 `results` ,最终打印出列表的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值