Curl多对象¶
- class pycurl.CurlMulti¶
创建一个新的 Curl多对象 它对应于一个
CURLM
Libcurl中的句柄。CurlMulti对象有以下方法:
- close() None ¶
对应于 curl_multi_cleanup 在libcurl。当CurlMulti对象不再具有对它的任何引用时,此方法由pycurl自动调用,但也可以显式调用。
- add_handle(Curl object) None ¶
对应于 curl_multi_add_handle 在libcurl。此方法将现有的有效Curl对象添加到CurlMulti对象。
Changed in version 7.43.0.2: ADD_HANDLE现在确保Curl对象在由CurlMulti对象使用时不会被垃圾回收。以前,应用程序必须维护对Curl对象的未完成引用,以防止它被垃圾收集。
- remove_handle(Curl object) None ¶
对应于 curl_multi_remove_handle 在libcurl。此方法从CurlMulti对象中移除现有的有效Curl对象。
- perform() tuple of status and the number of active Curl objects ¶
对应于 curl_multi_perform 在libcurl。
- socket_action(sock_fd, ev_bitmask)¶
返回在给定超时时对cURL多文件描述符执行Socket_action()的结果。对应于 curl_multi_socket_action 在libcurl。
返回值是由两个元素组成的元组。第一个元素是基础
curl_multi_socket_action
函数,并且始终为零。 (CURLE_OK
),因为任何其他返回值都会导致socket_action
来引发一个例外。第二个元素是此多句柄中运行的轻松句柄的数量。当运行句柄的数量为零时,所有传输均已完成。请注意,如果运行句柄的数量与上一次调用相比减少了1,这并不意味着与sock_fd
作为此函数的参数提供的是完整的句柄。
- socket_all() tuple ¶
返回在给定超时时对cURL多文件描述符执行Socket_All()的结果。
- setopt(option, value) None ¶
设置Curl多选项。对应于 curl_multi_setopt 在libcurl。
option 指定要设置的选项。PycURL定义了与
CURLMOPT_*
Libcurl中的常量,除了CURLMOPT_
前缀替换为M_
前缀。例如,CURLMOPT_PIPELINING
在PycURL中公开为pycurl.M_PIPELINING
。为了方便起见,CURLMOPT_*
常量也在CurlMulti对象上公开::import pycurl m = pycurl.CurlMulti() m.setopt(pycurl.M_PIPELINING, 1) # Same as: m.setopt(m.M_PIPELINING, 1)
value 指定要将该选项设置为的值。不同的选项接受不同类型的值:
由指定的选项 curl_multi_setopt 作为接受
1
或一个整数值,接受Python整数、长整型(在Python2.x上)和布尔值:m.setopt(pycurl.M_PIPELINING, True) m.setopt(pycurl.M_PIPELINING, 1) # Python 2.x only: m.setopt(pycurl.M_PIPELINING, 1L)
*FUNCTION
选项接受一个函数。支持的回调包括CURLMOPT_SOCKETFUNCTION
ANDCURLMOPT_TIMERFUNCTION
。有关使用回调的示例,请参考PycURL测试套件。
当选项值不是相应选项接受的类型时引发TypeError,当libcurl拒绝该选项或其值时引发pycurl.error异常。
- fdset() tuple of lists with active file descriptors, readable, writeable, exceptions ¶
返回一个由三个列表组成的元组,这些列表可以传递给selt.select()方法。
对应于 curl_multi_fdset 在libcurl。此方法从CurlMulti对象中提取文件描述符信息。返回的列表可以与
select
模块轮询事件。示例用法::
import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "https://curl.haxx.se") m = pycurl.CurlMulti() m.add_handle(c) while 1: ret, num_handles = m.perform() if ret != pycurl.E_CALL_MULTI_PERFORM: break while num_handles: apply(select.select, m.fdset() + (1,)) while 1: ret, num_handles = m.perform() if ret != pycurl.E_CALL_MULTI_PERFORM: break
- select([timeout]) number of ready file descriptors or 0 on timeout ¶
返回在给定的超时时间内对cURL多文件描述符执行SELECT()的结果。
这是一个方便的函数,它简化了
fdset()
以及select
模块。示例用法::
import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "https://curl.haxx.se") m = pycurl.CurlMulti() m.add_handle(c) while 1: ret, num_handles = m.perform() if ret != pycurl.E_CALL_MULTI_PERFORM: break while num_handles: ret = m.select(1.0) if ret == 0: continue while 1: ret, num_handles = m.perform() if ret != pycurl.E_CALL_MULTI_PERFORM: break
- info_read([max_objects]) -> tuple(number of queued messages, a list of successful objects, a list of failed objects)¶
对应于 curl_multi_info_read 函数在libcurl中。
这种方法最多只能提取 max 来自多堆栈的消息,并在两个列表中返回它们。第一个列表包含成功完成的句柄,第二个列表包含一个元组 (curl object, curl error number, curl error message) 对于每个失败的Curl对象。CURL错误消息以Python字符串的形式返回,该字符串使用 surrogateescape 错误处理程序。还会返回调用此方法后排队的消息数。
- timeout() int ¶
返回在继续之前等待操作的时间。对应于 curl_multi_timeout 在libcurl。
- assign(sock_fd, object) None ¶
在多句柄中创建给定套接字和应用程序中的私有对象之间的关联。对应于 curl_multi_assign 在libcurl。