我使用python同时请求多个请求的web服务。为此,我创建线程并使用urllib(第一个版本,我使用python 2.6)。当我启动线程时,一切都很顺利,直到一个线程到达ulllib.urlopen()。第二个线程必须等到第一个线程结束后才能通过ulllib.urlopen()函数。由于我从远程web服务检索Json后做了很多工作,我希望第二个线程在同一时间或在第一个线程关闭其套接字之后"urlopen"。
我试图关闭刚刚收集JSON返回后打开的套接字,但它没有改变什么。第二个线程必须等待第一个线程结束。可以看到我使用了打印
我可以理解urllib不是线程安全的(谷歌这没有给出明确的答案),但为什么第二个线程必须等待第一个端(而不仅仅是套接字进程端)?
谢谢你的帮助和提示
PS:我不使用Python 3来兼容我需要的模块/包
这听起来不是预期的行为,因为两个并行urllib请求应该是可能的。你确定你的远程服务器可以处理两个并行请求(例如,它不是在调试模式与单线程)?
无论如何:线程不是Python并行编程的首选方法。要么使用进程,要么使用异步,尤其是在服务器端(你没有提到用例或你的平台,也可能有bug)。
我有非常好的经验处理和转换JSON/XML与产卵和Eventlets补丁Python套接字代码是异步的。
http://pypi.python.org/pypi/Spawning/http://eventlet.net/