相关疑难解决方法(0)

Python:os.fork()如何工作?

我在python中学习多处理.我尝试了多处理,在读完多处理模块的源代码之后,我发现它使用了os.fork(),所以我写了一些代码来测试os.fok(),但是我被困了.我的代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import time

for i in range(2):
    print '**********%d***********' % i
    pid = os.fork()
    print "Pid %d" % pid
Run Code Online (Sandbox Code Playgroud)

我认为每次打印都会执行两次,但执行三次.我无法理解这是如何工作的?我读过这个需要知道fork是如何工作的?
从这篇文章中说它也将被执行两次,所以我被困......

python fork

20
推荐指数
2
解决办法
3万
查看次数

使用multiprocessing.Manager.list而不是真实列表会使计算花费很长时间

我想multiprocessing从这个例子开始尝试不同的使用方法:

$ cat multi_bad.py 
import multiprocessing as mp
from time import sleep
from random import randint

def f(l, t):
#   sleep(30)
    return sum(x < t for x in l)

if __name__ == '__main__':
    l = [randint(1, 1000) for _ in range(25000)]
    t = [randint(1, 1000) for _ in range(4)]
#   sleep(15)
    pool = mp.Pool(processes=4)
    result = pool.starmap_async(f, [(l, x) for x in t])
    print(result.get())
Run Code Online (Sandbox Code Playgroud)

这里l是一个列表,当生成4个进程时,它会被复制4次.为避免这种情况,文档页面提供了使用队列,共享数组或代理对象multiprocessing.Manager.对于最后一个,我改变了以下定义l:

$ diff multi_bad.py multi_good.py 
10c10,11
<     l …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

python ×2

fork ×1

multiprocessing ×1