Python 进程与线程

目录:

模块:multiprocessing多进程,threading多线程

1. Python多进程

1.1Process

1.2Pool进程池

1.3 multiprocessing.Lock

2. Python 多线程

2.1Thread

2.2ThreadPool线程池

2.3 threading.Lock

3. 锁机制

4. 进程之间的通信:

multiprocessing.Queue 队列

multiprocessing.Pipe 管道

5. 分布式进程

multiprocessing.managers.BaseManager 进程管理器

将数据结构(例如Queue)通过Manager封装起来,


1.2 进程池

python自2.6开始提供了多进程模块multiprocessing,这里主要是介绍multiprocessing下的Pool的几个函数

一 apply(func[, args[, kwds]])

  apply用于传递不定参数,同python中的apply函数一致(不过内置的apply函数从2.3以后就不建议使用了),主进程会阻塞于函数。

for x in gen_list(l):

   result = pool.apply(pool_test, (x,))

   print 'main process'

这个时候主进程的执行流程同单进程一致

二 apply_async(func[, args[, kwds[, callback]]])

   与apply用法一致,但它是非阻塞的且支持结果返回后进行回调。

for x in gen_list(l):

   result = pool.apply_async(pool_test, (x,))

   print 'main process'

   这个时候主进程循环运行过程中不等待apply_async的返回结果,在主进程结束后,即使子进程还未返回整个程序也会就退出。虽然 apply_async是非阻塞的,但其返回结果的get方法却是阻塞的,在本例中result.get()会阻塞主进程。因此可以这样来处理返回结果:

   [x.get() for x in [pool.apply_async(pool_test, (x,)) for x ingen_list(l)]]

如果我们对返回结果不感兴趣,那么可以在主进程中使用pool.close与pool.join来防止主进程退出。注意join方法一定要在close或terminate之后调用。

    for x in gen_list(l):

   pool.apply_async(pool_test, (x, ))

   print 'main_process'

   pool.close()

   pool.join()

三 map(func, iterable[, chunksize])

  map方法与内置的map函数行为基本一致,在它会使进程阻塞与此直到结果返回。

   但需注意的是其第二个参数虽然描述的为iterable, 但在实际使用中发现只有在整个队列全部就绪后,程序才会运行子进程。

四 map_async(func, iterable[, chunksize[, callback]])

   与map用法一致,但是它是非阻塞的。其有关事项见apply_async。

五 imap(func, iterable[, chunksize])

   与map不同的是, imap的返回结果为iter,需要在主进程中主动使用next来驱动子进程的调用。即使子进程没有返回结果,主进程对于gen_list(l)的 iter还是会继续进行,另外根据python2.6文档的描述,对于大数据量的iterable而言,将chunksize设置大一些比默认的1要好。

  for x in pool.imap(pool_test, gen_list(l)):

      pass

六 imap_unordered(func, iterable[, chunksize])

   同imap一致,只不过其并不保证返回结果与迭代传入的顺序一致。

七 close()

   关闭pool,使其不在接受新的任务。

八 terminate()

   结束工作进程,不在处理未处理的任务。

九 join()

   主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用。

l = range(10)

def gen_list(l):

   for x in l:

       print 'yield', x

       yield x

def pool_test(x):

   print 'f2', x

   time.sleep(1)













例子:

生产者消费者模型


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理、企业管理、简历管理、老师管理、简历投递管理、新闻资讯管理、新闻资讯收藏管理、新闻资讯留言管理、学生信息管理、宣传管理、学生管理、职位招聘管理、职位收藏管理、招聘咨询管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生就业服务平台管理系统可以提高大学生就业服务平台信息管理问题的解决效率,优化大学生就业服务平台信息处理流程,保证大学生就业服务平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理新闻信息,管理大学生就业服务平台信息,包括考试管理,培训管理,投递管理,薪资管理等,可以管理新闻信息。 考试管理界面,管理员在考试管理界面中可以对界面中显示,可以对考试信息的考试状态进行查看,可以添加新的考试信息等。投递管理界面,管理员在投递管理界面中查看投递种类信息,投递描述信息,新增投递信息等。新闻信息管理界面,管理员在新闻信息管理界面中新增新闻信息,可以删除新闻信息。新闻信息类型管理界面,管理员在新闻信息类型管理界面查看新闻信息的工作状态,可以对新闻信息的数据进行导出,可以添加新新闻信息的信息,可以编辑新闻信息信息,删除新闻信息信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值