多线程或如何避免在Python应用程序中阻塞

时间:2012-12-01 18:30:03

标签: python multithreading asynchronous

我正在开发一个与用户“对话”的Python应用程序,并根据用户的说法执行任务(例如,用户:“我有任何新的Facebook消息吗?”,回答:“是的,你有两条新消息。你想看到它们吗?“)。插件提供了与facebook或twitter集成的功能。根据预定义的解析规则,我的应用程序使用解析的参数调用插件,并使用它的响应。应用程序需要能够同时(或几乎同时)回答来自不同用户的多个查询。

目前,我需要使用用户输入作为参数调用函数“Respond”。然而,这有一些缺点:

i)应用程序只能“在说出来时发言”。它不能决定在Facebook上查询新消息,并告诉用户是否这样做,而不是被告知这样做。

ii)一次与多个用户进行对话非常困难,因为应用程序一次只能做一件事:如果Alice要求应用程序检查她的Facebook是否有新消息,Bob无法与应用

iii)我无法开发(和使用)需要花费大量时间才能完成的插件,例如下载电影,因为应用程序无法执行任何操作,因为之前的任务未完成。

多线程似乎是显而易见的方法,但是我担心一次创建和使用500个线程会极大地影响性能,因此每个查询使用一个线程(查询是来自用户的声明)并不是似乎是正确的选择。

这样做的正确方法是什么?我已经阅读了一些关于Twisted的内容,而“reactor”方法看起来相当优雅。但是,我不确定如何在我的应用程序中实现类似的东西。

1 个答案:

答案 0 :(得分:0)

我真的不明白它将会是什么样的应用程序,但我试图回答你的问题

  1. 创建一个查询的线程,然后暂停一会儿
  2. 为每个用户创建一个帖子,并在用户离开时将其关闭
  3. 创建一个下载并停止的线程
  4. 毕竟,不会有500个线程。