python中的多线程和多进程,python进程数量
多进程 multiprocessing
因为Python是跨平台的,所以也应该提供跨平台的多进程支持。多处理模块是多处理模块的跨平台版本。
多重处理模块提供了一个进程类来表示一个进程对象。
Unix/Linux操作系统提供了一个fork()系统调用,很特别。普通函数调用一次返回一次,而fork()调用一次返回两次,因为操作系统自动复制当前进程(称为父进程)(称为子进程),然后分别在父进程和子进程中返回。
子进程总是返回0,而父进程返回子进程的ID。原因是一个父进程可以分叉出很多子进程,所以父进程要记下每个子进程的ID,而子进程只有通过调用getppid()才能得到父进程的ID。
Python的Os模块封装了常见的系统调用,包括fork,可以很容易地在Python程序中创建子进程:
进口货
打印(进程(%s)开始.%os.getpid())
# OnlyworksonUnix/Linux/MAC :
pid=os.fork()
ifpid==0:
print( Iamchildprocess(% s)and my parentis % s . %(OS . getpid(),os.getppid()))
else:
print( I(% s)justcreatedachildprocess(% s)。% (os.getpid(),pid))运行如下:
流程(69673)开始.
I(69673)justcreatedachildProcess(69674)
IAMDPROCES (69674)和myParentis69673。通过fork调用,流程可以在收到新任务时复制一个子流程来处理它。常见的Apache服务器是父进程监听端口,每当有新的http请求,就分叉出子进程来处理新的http请求。
但是这个分叉在windows操作系统中是没有的。因此,出现了一个处理fork的通用模块,以保证不同操作系统之间的调用。
多处理模块是多处理模块的跨平台版本。
多重处理模块提供了一个进程类来表示一个进程对象。以下示例说明了如何启动子流程并等待其结束:
#!/usr/bin/envpython
#编码=utf-8
fromt多重处理导入过程
进口货
子进程要执行的代码
defrun_proc(名称):
print( Runchildprocess % s(% s)%(name,os.getpid()))
if__name__==__main__:
print( parent process % s . % OS . getpid())
p=进程(target=run_proc,args=(test_code ,))
print(Childprocesswillstart。)
开始()
连接()
print(Childprocessend .)的执行结果)如下:
$ pythonforkbymutilprocessing . py
Parentprocess70227。
Childprocesswillstart。
Runchildprocesstest_code(70228)
ChildProcessend。创建子流程时,只需要传入一个函数及其参数,创建一个流程实例,用start()方法启动,这样创建流程就比fork()简单了。
join()方法可以等待子进程结束后再继续向下运行,通常用于进程间的同步。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。