关于 Python 并行多线程

2017-02-07 10:28:50 +08:00
 2225377fjs

不知论坛里面是否有 python 大神,现在想要实现这样的需求。。

整个进程就两个线程,一个用于处理 IO ,一个用于处理逻辑请求。。。

两个部分是 python 来实现,例如 IO 层采用 gevent 啥的。。。

两个线程需要并行的,两层之间的数据交互通过队列来做,不知这样能否实现。。?

也就是所想要在一个进程中启动两个 python 实例,两个并行的线程来分别运行这两个实例来处理不同的逻辑。

3890 次点击
所在节点    Python
9 条回复
kingmo888
2017-02-07 11:00:43 +08:00
为何要用 2 个实例呢?

弄个事件引擎哈(其实还是队列。)
2225377fjs
2017-02-07 11:08:46 +08:00
@kingmo888 这样是为了尽量提升单个进程的处理能力,所以想到了用两个并行的线程,一个线程用于处理 IO 以及数据包相关的事情,现在其实就是这样子的,只不过 IO 层用的是 C++的,但是考虑到要替换上层的实现,例如 pypy 的时候,就比较麻烦了,例如 binding 差异比较大。。
thomaspaine
2017-02-07 11:19:34 +08:00
生产消费模型?用 celery 试试呗
enenaaa
2017-02-07 11:25:21 +08:00
因为 gil 的存在, python 在同一时间点只能执行一个线程,与我们通常理解的线程概念不同。
但你有个线程是专门做 io 的, 所以也问题不大了。
zhtsuc
2017-02-07 11:33:26 +08:00
eventbus 即可。
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, ))
billowqiu
2017-02-07 13:46:46 +08:00
rim99
2017-02-07 22:30:24 +08:00
这是 multiprocessing 的基础 API 就能实现的啊,多看看文档吧
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 之类的库也是支持的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338650

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX