![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多进程和多线程
文章平均质量分 88
S_o_l_o_n
logic
展开
-
python进程池之创建子任务的函数总结
目录mapapplymap_async和apply_asyncimap和imap_unorderedstarmap和starmap_async python多进程标准库multiprocessing通过进程池启动多进程有以下几种方式,本文旨在说明这几种方式的区别:map、apply、map_async、apply_async、imap、imap_unordered、starmap、starmap_async。map函数签名:(func, iterable[, chunksize])原创 2022-06-25 15:14:22 · 1138 阅读 · 0 评论 -
被装饰函数无法多进程原因分析以及解决办法
被装饰器装饰的函数无法多进程原因 python多进程的原理是通过pickle多进程函数名,然后新建一个子进程并在子进程中导入模块后unpickle,通过访问模块的该函数来实现函数在子进程中的运行的,关于pickle更详细的说明可看笔者的这篇文章。关于多进程编程中的pickle的一个重点是,对于多进程函数的pickle,只会pickle其函数名,也即f.__name__属性,然后通过模块的点号访问,因此该函数必须是可以通过模块点号访问到的,这也就是为什么要求被pickle必须被定义在模块的顶层...原创 2020-05-14 21:41:39 · 1115 阅读 · 0 评论 -
spyder开发环境之多控制台下的多进程陷阱
spyder是anaconda自带的一款IDE,对于数据分析来说,是一个很好用的开发环境,笔者常用spyder来做一些开发和分析工作。笔者在一次利用spyder直接运行一个多进程脚本时,同时由于想进行其他工作,所以就多开了一个console控制台,结果多进程脚本只执行到多进程语句pool.join()之前,之后便一直停滞。经过反复测试,脚本本身没有问题,最后发现,当关闭新控制台后,脚...原创 2020-03-01 10:11:04 · 3068 阅读 · 1 评论 -
python多进程编程pool之利用traceback模块对子进程进行debug
一般情况下,我们只有当一个脚本在单进程的情况下测试通过后,才会利用多进程对其进行加速,这样避免了在多进程的情况下代码触发异常;但是我们总是无法保证脚本不会出现预期之外的bug,所以有时候在多进程中出现了bug,对其有效的debug是很有必要的。 在python多进程编程pool中,如果我们没有做特别的处理,那么当子进程报错了,是不会主动显示出来的,除非我们调用多进程结...原创 2019-10-29 19:47:21 · 2194 阅读 · 0 评论 -
Python: 多线程还是多进程?
并发编程一般来说,主要有两个目的:程序对并发效果的需求和提高程序运行效率。本文所讲的内容是针对提高程序运行效率这个话题的,因此对于多线程还是多进程的选择,后面将围绕如何提高程序运行效率展开。目录一、任务的执行时间拆分二、线程、进程和CPU调度三、全局解释器锁(GIL)四、python线程和进程的区别五、python中选择多线程和多进程的判断方法一、任务的执...原创 2019-10-16 17:46:42 · 1629 阅读 · 0 评论 -
python多进程编程之pickle的实现原理和底层机制
pickle是python的一个标准模块,其作用是将python对象进行序列化,序列化的目的在于对一个对象的状态进行编码以进行更好的保存和通信。python里面,pickle作为一种序列化的方式,具有较大的用处,特别是在多进程编程中,理解pickle的机制对正确的实现多进程是尤为必要的。 对于pickle的运用,主要有序列化和反序列化两个方向,对应的接口为dump和l...原创 2019-10-13 20:32:45 · 3615 阅读 · 0 评论 -
python多进程编程之IPC
IPC指的是进程间通信。在python的多进程编程中,虽然一般情况下,最好保持进程之间的独立性,避免引发一些预期之外的bug,但是有时难免需要在进程之间进行交流、同步。在python的进程间通信中,一般有两种主要的方式:一是共享内存;二是利用一个新的服务器进程作为进程间的桥梁,实现进程间的通信。 对于共享内存,其基本的原理是通过在内核中开辟一块内存,这块内存保存着进程...原创 2019-10-06 21:48:51 · 304 阅读 · 0 评论 -
线程安全、进程安全和死锁
在python的多线程和多进程编程中,当多个线程或进程对同一个对象同时进行访问或修改时,会发生线程或进程安全问题。 对于线程,由于不同的线程可以共享内存,所以对于同一个变量的访问往往容易造成线程安全问题。只要线程之间存在资源竞争,就会存在线程安全的可能性。比如,对于一个int型变量a,每个线程都会对其进行+1操作,那么如果一个线程在另一个线程获取到该变量的引用后并在内...原创 2019-10-06 18:30:34 · 2702 阅读 · 0 评论 -
python多进程编程之进程池中实现ctrl c让所有进程结束并正常退出
python多进程编程中,一般通过标准库multiprocessing实现,对此,既可以通过Process类实现,也可以通过进程池Pool实现。本文解决的问题是针对Pool的,因为只有在使用进程池时才会出现ctrl c无法正常退出程序,而使用Process类实现时ctrl c可以中止程序并退出。 在python的多进程编程中,有时候当程序正在执行的时候,我们希望通过c...原创 2019-10-05 21:51:09 · 4983 阅读 · 0 评论 -
python多进程编程之新建子进程的实现机制
在Unix系统下,python的multiprocessing模块下,直接通过分支一个新的进程,并调用进程对象的run方法来实现;这就相当于直接复制了父进程当前的状态,然后在此基础上在独立内存中运行。由于需要复制父进程的状态,所以如果父进程本身占用内存较大,那么新建的进程会加倍的增加内存占用。 而在Windows下,python的multiprocessing模块是通...原创 2019-10-05 15:50:48 · 484 阅读 · 0 评论 -
python多进程中的目标函数必须在if __name__=='__main__'语句之前定义
python多进程中,对于子进程的运行机制是:每个子进程中,由于不同的进程之间有独立内存,不会共享,所以每个子进程是通过分别导入所在的脚本模块来实现目标函数的运行的。对于这个机制,有以下两点需要特别注意。1、由于每个子进程是通过导入所在脚本的模块实现模块中函数的调用的,所以,为了避免将创建子进程的语句也被导入(因为这样就会造成无限循环创建子进程,这显然是不允许的,因此python...原创 2019-09-23 21:47:07 · 3592 阅读 · 0 评论 -
python实现主进(线)程退出时,所有子进(线)程也全部退出
python多进程或多线程中,如果我们想实现当主进程或主线程退出,则所有的子进程或子线程也全部退出时,可以使用daemon参数。daemon参数为True时,表示设定该线程或进程为守护线程或守护进程。守护线程或进程的意义就在于,其生命依赖主进程或主线程,只有当主进程或主线程活动时,其才会活动,一旦主进程或主线程退出了,则其也会自动退出。 这种情况特别会在当我们强制退出...原创 2019-06-15 23:14:41 · 1404 阅读 · 0 评论 -
python线程锁和进程锁
在python的多线程和多进程中,当我们需要对多线程或多进程的共享资源或对象进行修改操作时,往往会出现因cpu随机调度而导致结果和我们预期不一致的问题,这时就需要对线程或者进程加锁,以保证一个线程或进程在对共享对象进行修改时,其他的线程或进程无法访问这个对象,直至获取锁的线程的操作执行完毕后释放锁。所以,锁在多线程和多进程中起到一个同步的作用,以保护每个线程和进程必要操作的完整执行。...原创 2019-06-15 20:54:01 · 8620 阅读 · 1 评论 -
python的多线程和多进程
线程是cpu执行的最小单元,因此一个进程中至少有一个线程。当我们在处理任务时,是依靠线程进行的,多线程和多进程意味着要同时处理多个任务。这里“同时”只是一个粗糙的说法,严格地讲,真正在时间上同时进行的任务处理叫做并行,而cpu资源不断的在线程之间进行切换,以达到这几个任务在效果上看起来是同时进行的,这叫做并发。 在python中,线程和进程之间最大的不同在于,多线程没法利...原创 2019-01-06 23:23:06 · 373 阅读 · 0 评论 -
python多进程任务拆分之apply_async()和map_async()
当想要提高一个任务的执行效率时,我们可以通过拆分任务,把这个任务拆分成多个子任务,然后利用多进程进行异步执行,即同时处理,缩短整体的任务时间。在python的multiprocessing包中,有两个可以构造异步执行的进程任务方法,apply_async()和map_async(),两者都可以分别添加任务,然后多进程同时执行。但是两者有着重要区别,下面进行说明。 对于ap...原创 2019-01-08 12:31:47 · 16676 阅读 · 3 评论 -
如何通过微信实时监控程序运行情况---By itchat
本文准备环境:itchat、python3.6、win10 这两天一直在跑数据,由于处理的是A股全市场Level 1和Level 2的超高频数据,数据量很大,尽管开了多进程,还是要跑很久,而且因为不好预估时间,加上生怕程序中途出什么bug,就要频繁的登录服务器查看程序执行情况,看程序是否跑完,或者有没有中途出bug,这其实挺折磨人的。要是程序跑完了或者出bug了,可以直接让程序自己...原创 2019-01-10 23:47:33 · 6073 阅读 · 0 评论