【问题标题】:Does python's httplib.HTTPConnection block?python 的 httplib.HTTPConnection 会阻塞吗?
【发布时间】:2010-04-05 01:30:06
【问题描述】:

我不确定以下代码是否是python中的阻塞操作:

import httplib
import urllib

def do_request(server, port, timeout, remote_url):
    conn = httplib.HTTPConnection(server, port, timeout=timeout)
    conn.request("POST", remote_url, urllib.urlencode(query_dictionary, True))
    conn.close()
    return True

do_request("http://www.example.org", 80, 30, "foo/bar")
print "hi!"

如果是,如何在 python 中创建非阻塞异步 http 请求?

感谢 python 菜鸟。

【问题讨论】:

    标签: python


    【解决方案1】:

    除非您竭尽全力阻止它,否则IO 将始终阻止。

    虽然你可以使用asynchronous requests,但你必须让你的整个程序异步友好。 异步不会神奇地使您的代码非阻塞。如果您不想阻塞主循环,那么在另一个线程或进程中执行请求会容易得多。

    如果您对异步网络编程感兴趣,可以关注Twisted

    【讨论】:

    • @Lee - Tornado 是一个小型的、基于事件的服务器和 Web 框架。尽管您可以将上面的示例硬塞到它的事件循环中,但它并不适合这种情况。 (我喜欢 Tornado,并在几个小项目中使用过它)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多