python多进程编程代码
python主进程和子进程能否通过queue通信?
python主进程和子进程能否通过queue通信?
两个同时通过是不行的,只可两选一。
python的优点不包括什么?
python优点不包括以下内容:
1、Python 多线程和速度
Python 整体性能缓慢,有限的线程和多处理能力是其未来发展的主要障碍。
Python长期以来一直重视编程的易用性而不是运行时的速度。当通过使用C或C 编写的高速外部库(如Numpy和Numba)在Python中完成如此多的性能密集型任务时,你会发现Python重视编程的易用性也是一种不错的选择。但是尽管如此,Python的开箱即用的性能速度依然落后于其他语言,比如说具有同样简单语法的Nim和Julia,却可以被编译为机器代码,具有更高的性能优势。
Python无法全面利用多核处理器是其长久以来的问题,它确实具有线程功能,但它的线程功能是局限于单个核心的。虽然Python可以使用多进程,但是调度和同步这些子进程的结果并不总是有效。
2、Python 打包和可执行文件
即使在Python诞生30年后,Python依然没有很好的方法来生成可执行文件(exe程序等)我们只能通过第三方工具解决。而且用起来比较麻烦。
3、Python 包管理、项目管理
当你想将一个本地比较复杂的Python工程移植到服务器上的时候,你就知道Python项目管理是有多蛋疼了你需要不断地安装项目依赖,依赖的依赖可能还有依赖,就像俄罗斯俄罗斯套娃一样,恨不得直接把键盘吃了。
C 多线程消息队列?
看什么情况下使用,方法很多。
如果调用频度不高,我做量化分析程序一般是用c 启用python进程,用的pypy速度快点,pypy生成结果到redis或mysql的内存表中,调用结束后c 去redis或mysql的内存表中取出来,你也可以使用文件写入来完成,但文件写入容易出现不同步问题,不想用网络版的,可以用sqlite写入结果,再在另外一个程序用sqlite读取。如果类似互联网业务,可以使用消息队列,消息服务器通信。如果你的程序需要线程安全,需要临界区保护,最好用消息队列这种支持多线程多进程同时访问,消息队列比数据库存储要快,但没有数据库方便。
有个c 版的本机版vedis,高仿redis的嵌入版,你可以用这个初期开发,如果需要切换到redis,很容易修改vedis成redis,ssdb可以把redis落地存储,ssdb是高仿redis的存储版。
如果没有数据存储,可以使用socket通信,或用多进程通信,如chrome是多进程的,通信用的命名管道(Named Pipe),多语言之间调用理论上可以用这个。命名管道要比消息队列快,但需要自己定制。调用方法的协议,可以使用json来完成,这样n多语言都可以通用,如果追求性能可能使用二进制通信协议。
python调用c语言方法也很成熟,但需要自己写一些代码包装一下,需要防止内存泄漏,多线程同步,阻塞,异常等问题。