我使用python同时请求包含许多请求的Web服务。为此,我创建线程并使用urllib(第一个版本,我使用python 2.6)。 当我启动线程时,一切顺利,直到一个到达ulllib.urlopen()。第二个线程必须等到第一个线程结束才能通过ulllib.urlopen()函数。在从远程Web服务检索Json之后我做了很多工作,我希望第二个线程在同一时间或者在第一个线程关闭其套接字之后“urlopen”。
我尝试在收集返回的JSON之后关闭套接字,但它什么都没改变。第二个线程必须等待第一个线程结束。要看到我使用印刷品。
我可以理解urllib不是线程安全的(谷歌这没有给出明确的答案),但为什么第二个线程必须等待第一个结束(而不仅仅是套接字进程结束)? / p>
感谢您的帮助和提示
PS:我不使用Python 3来兼容我需要的模块/包
答案 0 :(得分:1)
这听起来不是预期的行为,因为两个并行的urllib请求应该是可能的。您确定您的远程服务器可以处理两个并行请求(例如,它不在单个线程的调试模式下)吗?
任何情况:线程并不是使用Python进行并行编程的首选方法。使用进程或异步,尤其是在服务器端(您没有提到用例或您的平台也可能有错误)。
我使用Spawning和Eventlet处理和转换JSON / XML非常好,它将Python套接字代码修补为异步。