我的问题是这个;是否可以同时请求两个不同的 URL?
我正在尝试做的是使用 Python 脚本同时调用来自两个不同 URL 的请求。使两个PHP脚本同时运行(在不同的服务器上,运行终端命令)。我的问题是我不能紧接着做它们,因为它们每个人都需要特定的时间来做某事,并且需要同时运行,并在同一时间结束。
使用 urllib2.urlopen 可以这样做吗?如果是这样,我将如何去做?
如果没有,那么这样做的好方法是什么?
目前我有这样的东西:
import urllib2
...
if cmd.startswith('!command '):
cmdTime = cmd.replace('!command ','',1)
urllib2.urlopen('http://example.com/page.php?time='+cmdTime)
urllib2.urlopen('http://example2.com/page.php?time='+cmdTime)
print "Finished."
我的问题是它们不会同时运行。
如果我执行了 !command 60,那么它将 site.com 运行 60 秒,然后转到 site2.com 60 秒并运行该命令。
我建议您创建一个函数来获取解析的源代码,您应该在其中传递要在列表中抓取的 url 列表作为参数。稍后循环 URL 列表并使用线程。我将为您发布一些示例代码,请相应地修改。
import threading
import urllib2
def execute_url_list(urls_list):
if cmd.startswith('!command '):
cmdTime = cmd.replace('!command ','',1)
for url in urls_list:
urllib2.urlopen(url+cmdTime)
urls_list = ['url1', 'url2']
processes = []
for k in urls_list:
process = threading.Thread(target=execute_url_list, args=[k])
process.setDaemon(True)
process.start()
processes.append(process)
for process in processes:
process.join()
我认为您可以使用多线程并在一个线程中发送一个请求。在python中,你可以继承线程。线程类和重写运行方法。您可以启动两个线程并在两个线程中使用同步,以确保两个请求几乎同时发送。
但我认为它不能确保服务器上的 php 脚本将同时准确执行,因为网络时间和系统调度时间不受您的控制。