在同一时间使用urllib2.urlopen()的多个请求

2024-10-01 15:38:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是:是否可以同时请求两个不同的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."

我的问题是它们不能同时运行。在

如果我做了!命令60,然后它会运行site.com网站60秒,然后在site2.com上运行60秒。在


Tags: 命令服务器脚本cmdcomhttpurltime
2条回答

我认为你可以使用多线程,在一个线程中发送一个请求。在python中,可以继承线程。线程类和重写运行方法。您可以启动两个线程,并在两个线程中使用synchronous,以确保两个请求几乎同时发送。在

但是我认为它不能保证服务器上的php脚本能够完全同时执行,因为网络时间和系统调度时间不受您的控制。在

我建议您创建一个用于获取已解析源的函数,在该函数中,您应该将要在列表中爬网的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()

相关问题 更多 >

    热门问题