Python中多进程和多线程如何分配使用?

比如我当前有个需求:

主进程:
1、socket 通讯;
2、更新检测;

我想启用主进程,然后主进程里面启动两个子进程或者是线程;
socket 保持一直通讯状态;
更新检测,做个定时器,每天凌晨进行更新检测,如果有更新,就下载回来,然后替换 socket 的 py 脚本;

那么我这个应该怎么办?
如果有更新,就在主进程判断?然后结束 socket ?然后替换后 再启动 socket ? 这样操作?


是用 multiprocessing 还是用 threading ?
求各位前辈赐教。
Python中多进程和多线程如何分配使用?


14 回复

代码该怎么写不是需求,代码要解决什么问题才是需求。


多进程和多线程的选择主要看你的任务类型。

多线程适合I/O密集型任务,比如网络请求、文件读写、数据库操作。因为线程切换开销小,在等待I/O时可以切换到其他线程继续工作。Python的GIL(全局解释器锁)对这类任务影响不大。

多进程适合CPU密集型任务,比如大量数学计算、图像处理。每个进程有自己的Python解释器和内存空间,能绕过GIL限制,真正利用多核CPU。

简单说:I/O多用线程,计算多用进程。

混合使用时,可以用进程池处理计算任务,每个进程内部用线程池处理I/O,但要注意复杂度。

总结:看任务类型选方案。

参考 nginx 管理 worker 原理,两子进程监听端口处理通信,主进程程定时更新下载,有更新再启动两个子进程,然后等两子进程处理完所以请求之后关闭他们。

最后那句是关闭两个老的子进程

大神有没有例子文档啥的。

没记错的话,python 线程只能 1 个 cpu
所以通讯肯定多线程,线程下起不起进程自己决定喽

感觉用 Jenkins 调度最方便

别想多,直接抄 openstack 的 service 模块,多线程多进程都帮你封装好了
不要折腾什么 multiprocessing.

仔细想了下…你现在只适合用 crontab

多进程+协程

GIL 这把大锁在,讨论多线程就没有任何意义, 建议直接用 协程 简单方便 也容易理解

Jenkins 轮询+1

哪个 service 模块 发出来 学习学习

回到顶部