raport怎么创建子程序

raport怎么创建子程序,第1张

子程序

python如何创建子程序_Python中生成器与子程序的并发控制

楚沐风

原创

关注

0点赞·572人阅读

给出示例代码:def main(init):

def report(x):

print x

bigop(init, report)

不过,我不认为这就是你要找的。{{cd2>可能想把数据迹大输入到^ cd2>中。在

您可以通过扭转局面来实现这一点,而不是view是一个驱动另一个生成器的生成器,它是由外部调用程序在其上调用send来驱动的生成器。例如:

^{pr2}$

但你说过view不能改变。当然,您可以编写一个viewdriver,它是一个新的对象,只要send它就是一个新对象。或者,更简单地说,只需反复调用view([data])并让它在单个对象上迭代。在

不管怎样,我不明白你怎么指望这会有什么帮助。bigop不是一个协同程序,您不能将其转换为一个。鉴于此,没有办法强迫它与其他协同程序合作共享。在

如果您想同时交错处理和报告,您必须使用线程(或进程)。事实上,“在BIGOP继续之前,报表必须在每一步都完成”已经是您需求的一部分,这意味着您无论如何也不能安全地执行任何并发 *** 作,所以我不确定您在寻找什么。在

如果您只想在没有并发的情况下交错处理和报告,或者定期挂接到bigop,或者其他凳州肢类似的事情,那么您可以使用协程来枣世实现这一点,但是它将具有与使用子例程完全相同的效果,上面的两个示例几乎相当。所以,你无缘无故地增加了复杂性。在

(如果bigop是I/O绑定的,那么可以使用greenlets,并使用monkeypatch对I/O *** 作进行异步化,就像gevent和{}一样。但如果是CPU限制的,这样做没有任何好处。)

一、概念

1、进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程纳烂间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。

2、线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

3、协程

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接 *** 作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

 

二、区别:

1、进程多与线程比较

线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:

1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间

2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

3) 线程是处理器调度的基本单位,但进程不是

4) 二者均可并发执行

5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

2、协程多与线程进行比较

1) 一个线程可以多个协程,梁尘一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。

2) 线程进程都是同步机制,而协程则是异步

3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态

 

 三、进程和线程、协程在python中的使用

1、多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,当然生产者消费者这种也可以使用。多进程的优势就是一个子进程崩溃并不会影响其他子进程和主进程的运行,但缺点就是不能一次性启动太多进程,会严重影响系统的资源调度,特别是CPU使用率和负载。使用多进程可以查看文章《python 多进程使用总结》。注:python2的进程池在类中的使用会有问题,需要把类函数定义成全局函数。具体可参考 http://bbs.chinaunix.net/thread-4111379-1-1.html

2、多线程一般是使用threading库,完成一些IO密集型并发 *** 作。多线程的优势是切换快,资源消耗低,但一个线程挂掉则会影响到所有线程,所以不够洞渣漏稳定。现实中使用线程池的场景会比较多,具体可参考《python线程池实现》。

3、协程一般是使用gevent库,当然这个库用起来比较麻烦,所以使用的并不是很多。相反,协程在tornado的运用就多得多了,使用协程让tornado做到单线程异步,据说还能解决C10K的问题。所以协程使用的地方最多的是在web应用上。

总结一下就是IO密集型一般使用多线程或者多进程,CPU密集型一般使用多进程,强调非阻塞异步并发的一般都是使用协程,当然有时候也是需要多进程线程池结合的,或者是其他组合方式。

Python从诞生之初就被誉为最容易上手的编程语言。进入当今火热的 AI 人工智能时代后,它也逐渐成为编程界的头牌语言。

Python是一入门快、功能强大、高效灵活的编程语言,学会之后拆猛无论是想进入数据分析、人工智能、网站开发、网络安全、集群运维这些领域,还是希望掌握第一门编程语言,都可以用 Python来开启美好未来的无限可能!

Python是人游御液工智能(AI)和数据分析第一语言。

Google开源机器学习框架:TenserFlow。

开源社区主推学神物习框架:Scikit-learn。

百度开源深度学习框架:Paddle。

... ...

以上框架,均有python开发接口。

不仅如此,Python还含有优质的文档、丰富的AI库、机器学习库、自然语言和文本处理库。尤其是Python中的机器学习,实现了人工智能领域中大量的需求。

所以学习python以后将大有可为。

最后分享一套python教程:网页链接


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12417037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存