首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中并行处理的进程流

python中并行处理的进程流
EN

Stack Overflow用户
提问于 2017-12-21 01:50:09
回答 1查看 315关注 0票数 0

我正在学习python中的并行处理,对于以下程序的执行流程我有一些非常明确的疑问。在这个程序中,我根据过程将我的列表分成两部分。我的目标是两次并行运行add函数,其中一个进程获取列表的一部分,而另一个进程则运行另一部分。

代码语言:javascript
复制
import multiprocessing as mp
x = [1,2,3,4]

print('hello')
def add(flag, q_f):
    global x
    if flag == 1:
        dl = x[0:2]
    elif flag == 2:
        dl = x[2:4]
    else:
        dl = x
    x = [i+2 for i in dl]
    print('flag = %d'%flag)
    print('1')
    print('2')
    print(x)
    q_f.put(x)

print('Above main')

if __name__ == '__main__':
    ctx = mp.get_context('spawn')
    print('inside main')
    q = ctx.Queue()
    jobs = []
    for i in range(2):
        p = mp.Process(target = add, args = (i+1, q))
        jobs.append(p)
    for j in jobs:
        j.start()
    for j in jobs:
        j.join()
    print('completed')
    print(q.get())
    print(q.get())

print('outside main')

我得到的输出是

代码语言:javascript
复制
hello
Above main
outside main
flag = 1
1
2
[3, 4]
hello
Above main
outside main
flag = 2
1
2
[5, 6]
hello
Above main
inside main
completed
[3, 4]
[5, 6]
outside main

我的问题是

1)从输出中可以看出,一个进程先执行,然后再执行另一个进程。该程序是否实际使用多个处理器进行并行处理?如果没有,我如何才能使其并行处理?如果是并行处理,则打印语句打印(‘1’)打印(‘2’)应该随机执行,对吗?

( 2)我能否以编程方式检查程序运行在哪个处理器上?

3)为什么要三次执行main之外的print语句(你好,上方,外部main)?

4)程序执行的流程是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-21 02:12:03

1) add()的执行可能是如此之快,以至于第一个执行在第二个进程启动时就已经结束了。

2)进程通常不是分配给特定的CPU,而是在它们之间跳转

3)如果您对每个已启动的进程使用Windows,则必须再次执行该模块。对于这些执行,__name__不是'main',但是像这些print这样的无条件命令都会被执行。

4)在Windows上调用start() of Process时,将启动新的Process解释器,这意味着导入(因此执行)必要的模块,并将运行子进程所需的资源传递给新的解释器(https://docs.python.org/3.6/library/multiprocessing.html#contexts-and-start-methods描述的“派生”-method)。然后,所有进程都独立运行(如果程序没有同步)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47916816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档