不知论坛里面是否有 python 大神,现在想要实现这样的需求。。
整个进程就两个线程,一个用于处理 IO ,一个用于处理逻辑请求。。。
两个部分是 python 来实现,例如 IO 层采用 gevent 啥的。。。
两个线程需要并行的,两层之间的数据交互通过队列来做,不知这样能否实现。。?
也就是所想要在一个进程中启动两个 python 实例,两个并行的线程来分别运行这两个实例来处理不同的逻辑。
1
kingmo888 2017-02-07 11:00:43 +08:00
为何要用 2 个实例呢?
弄个事件引擎哈(其实还是队列。) |
2
2225377fjs OP @kingmo888 这样是为了尽量提升单个进程的处理能力,所以想到了用两个并行的线程,一个线程用于处理 IO 以及数据包相关的事情,现在其实就是这样子的,只不过 IO 层用的是 C++的,但是考虑到要替换上层的实现,例如 pypy 的时候,就比较麻烦了,例如 binding 差异比较大。。
|
3
thomaspaine 2017-02-07 11:19:34 +08:00
生产消费模型?用 celery 试试呗
|
4
enenaaa 2017-02-07 11:25:21 +08:00
因为 gil 的存在, python 在同一时间点只能执行一个线程,与我们通常理解的线程概念不同。
但你有个线程是专门做 io 的, 所以也问题不大了。 |
5
zhtsuc 2017-02-07 11:33:26 +08:00
eventbus 即可。
|
6
tankeco 2017-02-07 13:43:33 +08:00
两个进程行吗...随手糙一个...
from multiprocessing import Queue, Process def io_worker(q): data =gao1() q.put(data) def logic_worker(q): data = q.get() gao2(data) def main(): q = Queue() p1 = Process(io_worker, args=(q, )) p2 = Process(logic_worker, args=(q, )) |
8
rim99 2017-02-07 22:30:24 +08:00
这是 multiprocessing 的基础 API 就能实现的啊,多看看文档吧
|
9
NoAnyLove 2017-02-08 03:43:25 +08:00
没有看出有啥问题啊, threading 或者 multiprocessing 都能实现。有点不太理解楼主对并行线程的的定义是啥。。。。。虽然有 gil ,但是在 IO 和逻辑分别用不同线程处理的时候也没啥问题啊。
而且其实做成单线程也不会有大问题, Linux 下可以用 select ,或者 asyncio 来做都行。 Windows 下要麻烦一点, select 只支持 socket ,异步的 IO 可能需要自己用 Win32 API 封装吧,不过 asyncio 有说自己是用的 IOCP ,理论上可以处理异步 IO ,只是 asyncio 文档好复杂,反正我还么学懂 此外, gevent 之类的库也是支持的 |