同步调用等待的代码修改成异步执行

2017-02-25 23:28:47 +08:00
 4ever911
Python 程序调用了一些 c++导出的函数,这些函数大多会访问网络,会阻塞等待。

因为一些原因,现在无法修改那部分代码,所以我考虑用 thread / gevent 来在 python 里面实现异步操作。

直接把处理函数丢给 thread/gevent 里面去处理,这样主线程 UI 也不会阻塞住,在处理完成后,通知主线程去处理数据结果。

对 Python 不熟,请问有什么更好的方法吗?
2245 次点击
所在节点    Python
6 条回复
ryd994
2017-02-26 07:06:28 +08:00
1.C 代码是用不了 gevent 的。 gevent 是套住 Python 的 IO 操作
2.thread 大概没问题
yuyang
2017-02-26 09:22:42 +08:00
豆瓣开源了一个叫 greenify 的项目,直接二进制打 patch,你可以试一试
SlipStupig
2017-02-26 18:34:52 +08:00
如果导出函数不是异步操作 Gevent 管不了,想要解决这个只能用 C 去 call Gevent 的 API
messense
2017-02-26 22:42:01 +08:00
用 Cython nogil 模式调用 C++ 函数,然后在 Python 这边可以用 threading 来调用这个 Cython wrapper
messense
2017-02-26 22:42:58 +08:00
4ever911
2017-03-18 15:02:50 +08:00
跟我想的差不多,丢到线程里面去处理来解决。

有一个封装好的包 multitasking

https://github.com/ranaroussi/multitasking

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

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

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

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

© 2021 V2EX