CurlShare Object¶
- class pycurl.CurlShare(detach_on_close=True) → New CurlShare object¶
Creates a new CurlShare Object which corresponds to a
CURLSHhandle in libcurl. CurlShare objects is what you pass as an argument to the SHARE option on Curl objects.The
CurlShareobject can be used as a context manager. Exiting the context callsclose().When a
CurlShareis closed, its behavior depends on the value ofdetach_on_close.Example:
with pycurl.CurlShare(detach_on_close=True) as s: curl.setopt(pycurl.SHARE, s) # perform operations # the CurlShare is closed and the Curl object has been detached
- Parameters:
detach_on_close (bool) –
Controls how associated Curl objects are handled when the
CurlShareis closed.If
True(default), all liveCurlobjects associated with the share are automatically detached whenclose()is called or when exiting the context manager. Detaching clears theSHAREoption on eachCurlobject, but does not close them. The caller remains responsible for managing the lifetime of theCurlobjects.If
False, callingclose()(or exiting the context manager) while there are stillCurlobjects associated with the share raises an exception. In this mode, the caller must explicitly remove or close all associatedCurlobjects before closing theCurlShare.
Warning
Detaching
Curlobjects from aCurlShareis not thread-safe with respect to thoseCurlobjects.The caller is responsible for ensuring proper synchronization when using
CurlShareandCurlobjects across multiple threads.CurlShare objects have the following methods:
- close() → None¶
Close shared handle.
Corresponds to curl_share_cleanup in libcurl. This method is automatically called by pycurl when a
CurlShareobject no longer has any references to it, but can also be called explicitly.The behavior of
close()depends on thedetach_on_closesetting of theCurlShare:If
detach_on_closeisTrue(default), all associated Curl objects are first detached from the share before the share handle is closed. Detaching clears theSHAREoption on eachCurlobject but does not close them.If
detach_on_closeisFalse, callingclose()while there are still associatedCurlobjects raisespycurl.errorand the share handle is not closed.
Warning
Automatic detachment performed when
detach_on_closeisTrueis not thread-safe with respect to the associatedCurlobjects. The caller must ensure that no other thread is operating on thoseCurlobjects whileclose()is executing.
- setopt(option, value) → None¶
Set curl share option.
Corresponds to curl_share_setopt in libcurl, where option is specified with the
CURLSHOPT_*constants in libcurl, except that theCURLSHOPT_prefix has been changed toSH_. Currently, value must be one of:LOCK_DATA_COOKIE,LOCK_DATA_DNS,LOCK_DATA_SSL_SESSIONorLOCK_DATA_CONNECT.Example usage:
import pycurl curl = pycurl.Curl() s = pycurl.CurlShare() s.setopt(pycurl.SH_SHARE, pycurl.LOCK_DATA_COOKIE) s.setopt(pycurl.SH_SHARE, pycurl.LOCK_DATA_DNS) curl.setopt(pycurl.URL, 'https://curl.haxx.se') curl.setopt(pycurl.SHARE, s) curl.perform() curl.close()
Raises pycurl.error exception upon failure.