使用urllib的Python线程

时间:2011-07-15 22:29:52

标签: python multithreading urllib python-2.6

我使用python同时请求包含许多请求的Web服务。为此,我创建线程并使用urllib(第一个版本,我使用python 2.6)。 当我启动线程时,一切顺利,直到一个到达ulllib.urlopen()。第二个线程必须等到第一个线程结束才能通过ulllib.urlopen()函数。在从远程Web服务检索Json之后我做了很多工作,我希望第二个线程在同一时间或者在第一个线程关闭其套接字之后“urlopen”。

我尝试在收集返回的JSON之后关闭套接字,但它什么都没改变。第二个线程必须等待第一个线程结束。要看到我使用印刷品。

我可以理解urllib不是线程安全的(谷歌这没有给出明确的答案),但为什么第二个线程必须等待第一个结束(而不仅仅是套接字进程结束)? / p>

感谢您的帮助和提示

PS:我不使用Python 3来兼容我需要的模块/包

1 个答案:

答案 0 :(得分:1)

这听起来不是预期的行为,因为两个并行的urllib请求应该是可能的。您确定您的远程服务器可以处理两个并行请求(例如,它不在单个线程的调试模式下)吗?

任何情况:线程并不是使用Python进行并行编程的首选方法。使用进程或异步,尤其是在服务器端(您没有提到用例或您的平台也可能有错误)。

我使用Spawning和Eventlet处理和转换JSON / XML非常好,它将Python套接字代码修补为异步。

http://pypi.python.org/pypi/Spawning/

http://eventlet.net/