python多线程&多进程

refer

  • Daemon is not daemon
  • daemon thread 和守护进程没什么关系
  • key feature
  1. background task --> Once join() is used , whether deamon attribute is True is not important
  2. only useful when the main program is running
  3. ok to kill
  • daemon process

multi thread

  • GIL 锁住的是解释器
  • IO密集型

multi core

  • 计算密集型

comparasion( same & not same )

same

.start()
.run()
.join()
  • 不加join都默认杀不掉,而且主进程很大可能会乱序执行(跟子进程/线程混在一起)

not same

  • porcess
pool= mp.Pool( POOLSIZE:int=0 ) # 0 means use all cpu
results =[]
# method 1
results = pool.map( target , args:iterable of tuples )
for res in results :
	print(res)

# method 2
for i in range( x ) :
	results .append(pool.apply_async(target , args))	 # 非阻塞
	results .append(pool.apply(target , args:tuple))  # 阻塞

pool.close() # 关闭进程池,表示不能在往进程池中添加进程
pool.join() # 等待进程池中的所有进程执行完毕,必须在close()/terminate()之后调用

for res in results :
	print(res.get())  # 注意这里的get哦,因为这里返回的是一个结果对象
  • apply_async和apply的区别,懒人可以直接看人家的实验结果
  • 也有第三种方法就是pool.map(func, iterable[, chunksize]),它会使进程阻塞与此直到结果返回
    map_async是非阻塞的
  • process类的构造函数

init(self, group=None, target=None, name=None, args=(), kwargs={})

tips



thread-safe data structure

  • Queue , Value ,Array

你可能感兴趣的:(#,python,语言)