€•ÏKŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ#/translations/zh_CN/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/zh_TW/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/it_IT/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ja_JP/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ko_KR/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/sp_SP/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒ=/var/lib/git/docbuild/linux/Documentation/tools/jobserver.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒJob server module”h]”hŒJob server module”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒindex”“”)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œpair”Œmodule; lib.python.jobserver”Œmodule-lib.python.jobserver”hNt”auh1hÉhh¶hžhhŸNh NubhŒ paragraph”“”)”}”(hŒ@Interacts with the POSIX jobserver during the Kernel build time.”h]”hŒ@Interacts with the POSIX jobserver during the Kernel build time.”…””}”(hhÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸŒl/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver”h Khh¶hžhubhÛ)”}”(hŒOA "normal" jobserver task, like the one initiated by a make subrocess would do:”h]”hŒSA “normal†jobserver task, like the one initiated by a make subrocess would do:”…””}”(hhëhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸhêh Khh¶hžhubhŒ block_quote”“”)”}”(hŒÞ- open read/write file descriptors to communicate with the job server; - ask for one slot by calling:: claim = os.read(reader, 1) - when the job finshes, call:: os.write(writer, b"+") # os.write(writer, claim) ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒDopen read/write file descriptors to communicate with the job server;”h]”hÛ)”}”(hjh]”hŒDopen read/write file descriptors to communicate with the job server;”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸhêh Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)”}”(hŒ, >]”h]”(hŒclass”…””}”(hj#hžhhŸNh NubhŒdesc_sig_space”“”)”}”(hŒ ”h]”hŒ ”…””}”(hj-hžhhŸNh Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j+hj#ubeh}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j!hjhžhhŸŒz/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec”h KubhŒ desc_addname”“”)”}”(hŒlib.python.jobserver.”h]”hŒlib.python.jobserver.”…””}”(hjEhžhhŸNh Nubah}”(h]”h ]”(Œ sig-prename”Œ descclassname”eh"]”h$]”h&]”h±h²uh1jChjhžhhŸjBh KubhŒ desc_name”“”)”}”(hŒ JobserverExec”h]”hŒ JobserverExec”…””}”(hjWhžhhŸNh Nubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”h±h²uh1jUhjhžhhŸjBh Kubeh}”(h]”jah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œmodule”Œlib.python.jobserver”Œclass”hŒfullname”jYŒ _toc_parts”jpjY†”Œ _toc_name”jYuh1jhŸjBh KhjhžhubhŒ desc_content”“”)”}”(hhh]”(hÛ)”}”(hŒBases: :py:class:`object`”h]”(hŒBases: ”…””}”(hj{hžhhŸNh Nubh)”}”(hŒ:py:class:`object`”h]”j‚)”}”(hj…h]”hŒobject”…””}”(hj‡hžhhŸNh Nubah}”(h]”h ]”(Œxref”Œpy”Œpy-class”eh"]”h$]”h&]”uh1jhjƒubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œtools/jobserver”Œ refdomain”j’Œreftype”Œclass”Œ refexplicit”‰Œrefwarn”‰Œ py:module”jpŒpy:class”jYŒ reftarget”Œobject”uh1hhŸŒl/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver”h Khj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸŒz/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec”h KhjxhžhubhÛ)”}”(hŒ0Claim all slots from make using POSIX Jobserver.”h]”hŒ0Claim all slots from make using POSIX Jobserver.”…””}”(hj°hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸŒz/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec”h KhjxhžhubhÛ)”}”(hŒThe main methods here are:”h]”hŒThe main methods here are:”…””}”(hj¿hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸj¾h Khjxhžhubj)”}”(hhh]”(j)”}”(hŒopen(): reserves all slots;”h]”hÛ)”}”(hjÒh]”hŒopen(): reserves all slots;”…””}”(hjÔhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸj¾h KhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍhžhhŸj¾h Nubj)”}”(hŒ4close(): method returns all used slots back to make;”h]”hÛ)”}”(hjéh]”hŒ4close(): method returns all used slots back to make;”…””}”(hjëhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸj¾h Khjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍhžhhŸj¾h Nubj)”}”(hŒKrun(): executes a command setting PARALLELISM=. ”h]”hÛ)”}”(hŒIrun(): executes a command setting PARALLELISM=.”h]”hŒIrun(): executes a command setting PARALLELISM=.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸj¾h Khjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍhžhhŸŒ€/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.close”h Nubeh}”(h]”h ]”h"]”h$]”h&]”jqjruh1hÿhŸj¾h KhjxhžhubhÊ)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ3close() (lib.python.jobserver.JobserverExec method)”Œ(lib.python.jobserver.JobserverExec.close”hNt”auh1hÉhjxhžhhŸŒ€/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.close”h Nubj)”}”(hhh]”(j)”}”(hŒJobserverExec.close()”h]”(jV)”}”(hŒclose”h]”hŒclose”…””}”(hj3hžhhŸNh Nubah}”(h]”h ]”(jbjceh"]”h$]”h&]”h±h²uh1jUhj/hžhhŸŒ€/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.close”h KubhŒdesc_parameterlist”“”)”}”(hŒ()”h]”h}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jBhj/hžhhŸjAh Kubeh}”(h]”j)ah ]”(jjjkeh"]”h$]”h&]”joŒlib.python.jobserver”jqjYjrŒJobserverExec.close”jsjTŒ JobserverExec”Œclose”‡”juŒJobserverExec.close()”uh1jhŸjAh Khj,hžhubjw)”}”(hhh]”hÛ)”}”(hŒ'Return all reserved slots to Jobserver.”h]”hŒ'Return all reserved slots to Jobserver.”…””}”(hj]hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸj+h KhjZhžhubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhj,hžhhŸjAh Kubeh}”(h]”h ]”(Œpy”Œmethod”eh"]”h$]”h&]”Œdomain”jtŒobjtype”juŒdesctype”juŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jhžhhjxhŸj+h NubhÊ)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ2open() (lib.python.jobserver.JobserverExec method)”Œ'lib.python.jobserver.JobserverExec.open”hNt”auh1hÉhjxhžhhŸŒ/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.open”h Nubj)”}”(hhh]”(j)”}”(hŒJobserverExec.open()”h]”(jV)”}”(hŒopen”h]”hŒopen”…””}”(hj•hžhhŸNh Nubah}”(h]”h ]”(jbjceh"]”h$]”h&]”h±h²uh1jUhj‘hžhhŸŒ/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.open”h KubjC)”}”(hŒ()”h]”h}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jBhj‘hžhhŸj£h Kubeh}”(h]”j‹ah ]”(jjjkeh"]”h$]”h&]”joŒlib.python.jobserver”jqjYjrŒJobserverExec.open”jsj´Œ JobserverExec”Œopen”‡”juŒJobserverExec.open()”uh1jhŸj£h KhjŽhžhubjw)”}”(hhh]”hÛ)”}”(hŒ3Reserve all available slots to be claimed later on.”h]”hŒ3Reserve all available slots to be claimed later on.”…””}”(hj½hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸjh Khjºhžhubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjŽhžhhŸj£h Kubeh}”(h]”h ]”(Œpy”Œmethod”eh"]”h$]”h&]”jyjÔjzjÕj{jÕj|‰j}‰j~‰uh1jhžhhjxhŸjh NubhÊ)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ1run() (lib.python.jobserver.JobserverExec method)”Œ&lib.python.jobserver.JobserverExec.run”hNt”auh1hÉhjxhžhhŸŒ~/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.run”h Nubj)”}”(hhh]”(j)”}”(hŒ'JobserverExec.run(cmd, *args, **pwargs)”h]”(jV)”}”(hŒrun”h]”hŒrun”…””}”(hjïhžhhŸNh Nubah}”(h]”h ]”(jbjceh"]”h$]”h&]”h±h²uh1jUhjëhžhhŸŒ~/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.run”h KubjC)”}”(hŒcmd, *args, **pwargs”h]”(hŒdesc_parameter”“”)”}”(hŒcmd”h]”hŒ desc_sig_name”“”)”}”(hŒcmd”h]”hŒcmd”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhjþubj)”}”(hŒ*args”h]”(hŒdesc_sig_operator”“”)”}”(hŒ*”h]”hŒ*”…””}”(hj%hžhhŸNh Nubah}”(h]”h ]”Œo”ah"]”h$]”h&]”uh1j#hjubj )”}”(hŒargs”h]”hŒargs”…””}”(hj4hžhhŸNh Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhjþubj)”}”(hŒ**pwargs”h]”(j$)”}”(hŒ**”h]”hŒ**”…””}”(hjLhžhhŸNh Nubah}”(h]”h ]”j0ah"]”h$]”h&]”uh1j#hjHubj )”}”(hŒpwargs”h]”hŒpwargs”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubeh}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhjþubeh}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jBhjëhžhhŸjýh Kubeh}”(h]”jåah ]”(jjjkeh"]”h$]”h&]”joŒlib.python.jobserver”jqjYjrŒJobserverExec.run”jsjzŒ JobserverExec”Œrun”‡”juŒJobserverExec.run()”uh1jhŸjýh Khjèhžhubjw)”}”(hhh]”hÛ)”}”(hŒÀRun a command setting PARALLELISM env variable to the number of available job slots (claim) + 1, e.g. it will reserve claim slots to do the actual build work, plus one to monitor its children.”h]”hŒÀRun a command setting PARALLELISM env variable to the number of available job slots (claim) + 1, e.g. it will reserve claim slots to do the actual build work, plus one to monitor its children.”…””}”(hjƒhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸjçh Khj€hžhubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjèhžhhŸjýh Kubeh}”(h]”h ]”(Œpy”Œmethod”eh"]”h$]”h&]”jyjšjzj›j{j›j|‰j}‰j~‰uh1jhžhhjxhŸjçh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jvhjhžhhŸjBh Kubeh}”(h]”h ]”(Œpy”Œclass”eh"]”h$]”h&]”jyj¨jzj©j{j©j|‰j}‰j~‰uh1jhžhhh¶hŸNh NubhÊ)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'warn() (in module lib.python.jobserver)”Œlib.python.jobserver.warn”hNt”auh1hÉhh¶hžhhŸNh Nubj)”}”(hhh]”(j)”}”(hŒwarn(text, *args)”h]”(jD)”}”(hŒlib.python.jobserver.”h]”hŒlib.python.jobserver.”…””}”(hjÂhžhhŸNh Nubah}”(h]”h ]”(jPjQeh"]”h$]”h&]”h±h²uh1jChj¾hžhhŸŒq/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.warn”h KubjV)”}”(hŒwarn”h]”hŒwarn”…””}”(hjÑhžhhŸNh Nubah}”(h]”h ]”(jbjceh"]”h$]”h&]”h±h²uh1jUhj¾hžhhŸjÐh KubjC)”}”(hŒ text, *args”h]”(j)”}”(hŒtext”h]”j )”}”(hŒtext”h]”hŒtext”…””}”(hjçhžhhŸNh Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãubah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhjßubj)”}”(hŒ*args”h]”(j$)”}”(hŒ*”h]”hŒ*”…””}”(hjÿhžhhŸNh Nubah}”(h]”h ]”j0ah"]”h$]”h&]”uh1j#hjûubj )”}”(hŒargs”h]”hŒargs”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûubeh}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhjßubeh}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jBhj¾hžhhŸjÐh Kubeh}”(h]”j¹ah ]”(jjjkeh"]”h$]”h&]”joŒlib.python.jobserver”jqhjrjÓjsj-jÓ†”juŒwarn()”uh1jhŸjÐh Khj»hžhubjw)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jvhj»hžhhŸjÐh Kubeh}”(h]”h ]”(Œpy”Œfunction”eh"]”h$]”h&]”jyj<jzj=j{j=j|‰j}‰j~‰uh1jhžhhh¶hŸNh Nubeh}”(h]”(hØŒjob-server-module”eh ]”h"]”Œjob server module”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¹NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jlŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”jFjCsŒ nametypes”}”jF‰sh}”(jCh¶hØhŒtarget”“”)”}”(hhh]”h}”(h]”hØah ]”h"]”h$]”h&]”Œismod”ˆuh1j³hŸŒl/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver”h Khh¶hžhubjjj)j/j‹j‘jåjëj¹j¾uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.