egnchen / pyQQRobot

基于Python3与WebQQ协议的QQ机器人框架 A QQ robot framework based on WebQQ and Python3.
32 stars 6 forks source link

可以在listen的时候干其他事情嘛? #11

Closed WuTianming closed 8 years ago

WuTianming commented 8 years ago

初步判断是QQClient.listen(join=False)或者QQClient.listen(),但是貌似这样listen之后没法发送信息,显示The following error occurred when sending last message:,但是冒号后面就什么也没有了...

求解。

难道我需要自己开一个线程单独listen(join=True)? ^这好像是可行方法。

WuTianming commented 8 years ago

^好吧,这问题不是由于listen引起的,而是因为gid被我搞成了str类型...

但是,等待输入的时候为什么不能继续监听,而是会等待输入结束再输出接收的消息?怎么做到同步运行?

^抱歉我是写C的,对python了解不深

egnchen commented 8 years ago

不太理解你的问题。 但是,监听是会一直继续的。 listen(join=join_or_not)实际上是开一个监听消息的线程。 若设join=True那么这个方法会等待到线程结束以后再返回(也就是永远不会返回,因为监听永远不结束)。 若设join=False那么这个方法会直接返回,但线程会继续开着,你可以继续在主线程里面干活。但是若你的主线程活干完了,程序会直接退出,监听也会随之终止(我没有为监听设置守护进程)。 我不太理解你所谓的同步运行。我推荐你先在网上了解一下同步,异步,多线/进程,协程的概念。

WuTianming commented 8 years ago

好吧,实际上我想知道如何在等待输入的时候不堵住。比如,listen返回之后,我在主进程运行input(),然后等待输入的时候监听线程好像就停了。input()结束之后,监听进程所有的输出会同时出现。在网上搜了下,可能是什么GIL搞的鬼

WuTianming commented 8 years ago

但是好像有的时候又不是这种情况,会混在一起

egnchen commented 8 years ago

那就可能是你的错觉吧。

WuTianming commented 8 years ago

不管了,反正现在已经用curses写出来一个可以并行处理的命令行GUI了(其实抄了很多很多)。这些都无关紧要了

WuTianming commented 8 years ago

这个issue好像不是程序本身引起的,我关了

WuTianming commented 8 years ago

@eyeKill 等等... 没有设置为守护进程的话,主程序结束的时候应该会等待进程结束才对啊,怎么感觉说反了?

egnchen commented 8 years ago

啊 是说反了

WuTianming commented 8 years ago

:joy: