标签:不能 sync 线程 mil tar round highlight target test
进程:
一个程序运行起来之后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单位。不仅可以通过线程完成多任务,进程也是可以的。
调用:import multiprocessing
进程的几种用法:
1、没有参数
不能直接启动,需要加‘__name__ ==‘ __main__‘ ’
真真正正的利用了cpu的多核
eg:
import multiprocessing
import time
def test1():
for i in range(5):
time.sleep(1)
print(‘test1~{}‘.format(i))
def test2():
for i in range(5):
print(‘test2~{}‘.format(i))
time.sleep(1)
if __name__ == ‘__main__‘:
p1 = multiprocessing.Process(target=test1)
p2 = multiprocessing.Process(target=test2)
p1.start()
p2.start()
结果:
test2~0
test1~0
test2~1
test1~1
test2~2
test1~2
test2~3
test1~3
test2~4
test1~4
2、有参数时
import multiprocessing
import time
def test1(n):
for i in range(n):
time.sleep(1)
print(‘test1~{}‘.format(i))
def test2(n):
for i in range(n):
print(‘test2~{}‘.format(i))
time.sleep(1)
if __name__ == ‘__main__‘:
p1 = multiprocessing.Process(target=test1,args=(5,))
p2 = multiprocessing.Process(target=test2,args=(4,))
p1.start()
p2.start()
结果:
test2~0
test1~0
test2~1
test1~1
test2~2
test1~2
test2~3
test1~3
test1~4
3、进程池
库的导入方法
1、from multiprocessing import Pool(调用方法:pool)
2、import multiprocessing.pool(调用方法:multiprocessing.pool)
XXX=Pool(NUM) :NUM代表调用的数量,调用几个就运行几个
一定是先关闭,后运行 pool.close() pool.join()
eg:
import multiprocessing
from multiprocessing import Pool
import time
def test1():
for i in range(4):
time.sleep(1)
print(‘test1~{}‘.format(i))
def test2():
for i in range(4):
time.sleep(1)
print(‘test2~{}‘.format(i))
def test3():
for i in range(4):
time.sleep(1)
print(‘test3~{}‘.format(i))
def test4():
for i in range(4):
time.sleep(1)
print(‘test4~{}‘.format(i))
if __name__ == ‘__main__‘:
pool = Pool(2) #Pool(NUM)调用的数量,调用几个就运行几个
pool.apply_async(test1)
pool.apply_async(test2)
pool.apply_async(test3)
pool.apply_async(test4)
pool.close() #一定是先关闭,后运行
pool.join()
结果:
1、
(pool = Pool(2))
test1~0
test2~0
…
test1~3
test2~3
test3~0
test4~0
…
2、
pool = Pool(4)
test1~0
test4~0
test2~0
test3~0
4、不共享、互不干涉,进程间有隔离性
import multiprocessing
import time
n = 0
def test1():
global n
for i in range(10):
n += 1
print(‘test1:‘,n)
def test2():
global n
for i in range(10):
n += 1
print(‘test2:‘, n)
if __name__ == ‘__main__‘:
p1 = multiprocessing.Process(target=test1)
p2 = multiprocessing.Process(target=test2)
p1.start()
p2.start()
print(‘全局:‘,n)
结果:
全局: 0
test1: 10
test2: 10
标签:不能 sync 线程 mil tar round highlight target test
原文地址:https://www.cnblogs.com/twoo/p/11685826.html