2014-10-07 5 views
38

का उपयोग करने के लिए पिप बिल्ड विकल्प मैंने पाया कि पीआईपी संकुल संकलित करते समय केवल एक कोर का उपयोग करता है। चूंकि कुछ पायथन पैकेजों को पाइप का उपयोग करने के लिए कुछ समय लगता है, इसलिए मैं मशीन पर मल्टीकोर का उपयोग करना चाहता हूं। मेकफ़ाइल का उपयोग करते समय, मैं इसे निम्न आदेश की तरह कर सकता हूं:मल्टीकोर

make -j4 

मैं पाइप के लिए एक ही चीज़ कैसे प्राप्त कर सकता हूं?

+0

[समानांतर पाइप इंस्टॉल] के संभावित डुप्लिकेट (http: // stackoverflow.com/questions/11021130/parallel-pip-install) –

+3

मुझे नहीं लगता कि यह डुप्लिकेट प्रश्न है। "समांतर पिप इंस्टॉल" धागे में, अगर मैं सही ढंग से समझ गया, तो लेखक एकाधिक पाइप इंस्टॉल प्रक्रियाओं को चलाने के लिए चाहता है। इसके विपरीत, मैं जो करना चाहता हूं वह एकाधिक कोर का उपयोग करके एक पैकेज स्थापित करना है। – Jihun

+1

जहां तक ​​मुझे पता है यह लागू नहीं किया गया है। कमांड build_ext को इसे प्राप्त करने के लिए अनुकूलित किया जाना है। – marscher

उत्तर

2

जो मैं कह सकता हूं उससे पीपी की तरह यह क्षमता नहीं है लेकिन मुझे गलत हो सकता है।

बहु अजगर में आप बहु पैकेज का उपयोग करने के लिए, (http://pymotw.com/2/multiprocessing/basics.html) इसे कैसे करना है अगर आप रुचि रखते हैं के बारे में [यहाँ एक गाइड मैंने पाया है] और इस अजगर डॉक्स कि इस बारे में बात करने के लिए एक link है। मुझे यह प्रश्न यह भी सुनिश्चित करने के लिए मिला कि Multiprocessing vs Threading Python, यह सुनिश्चित करने के लिए कि मल्टीप्रोसेसिंग ने जो किया है, मैंने कई सीपीयू का लाभ उठाया है।

मैं पाइप स्रोत कोड (उपलब्ध here) से गुजर चुका हूं, मल्टीप्रोसेसिंग पैकेज के संदर्भ की तलाश में और पैकेज का कोई उपयोग नहीं मिला। इसका मतलब यह होगा कि पाइप मल्टीप्रोसेसिंग का उपयोग/समर्थन नहीं करता है। मैं /pip/commands/install.py फ़ाइल को बता सकता हूं कि आपके प्रश्न के लिए रुचि है क्योंकि इसे pip install <package> चलाते समय कहा जाता है। इस फ़ाइल के लिए विशेष रूप से आयात

from __future__ import absolute_import 

import logging 
import os 
import tempfile 
import shutil 
import warnings 

from pip.req import InstallRequirement, RequirementSet, parse_requirements 
from pip.locations import virtualenv_no_global, distutils_scheme 
from pip.basecommand import Command 
from pip.index import PackageFinder 
from pip.exceptions import (
    InstallationError, CommandError, PreviousBuildDirError, 
) 
from pip import cmdoptions 
from pip.utils.deprecation import RemovedInPip7Warning, RemovedInPip8Warning 

जो आप देख सकते हैं बहु पैकेज के लिए किसी भी संदर्भ नहीं है कर रहे हैं लेकिन मैं अन्य फ़ाइलों के सभी की जाँच किया था बस सुनिश्चित करने के।

इसके अलावा, मैंने pip install documentation की जांच की और एकाधिक कोर का उपयोग करके इंस्टॉल करने का कोई संदर्भ नहीं मिला।

टीएल; डीआर: पिप जो भी आप पूछ रहे हैं वह नहीं करता है। मैं गलत हो सकता हूं क्योंकि मैंने लंबे समय तक स्रोत को नहीं देखा लेकिन मुझे पूरा यकीन है कि यह इसका समर्थन नहीं करता है।

+0

यह एक है व्यावहारिक तर्क हालांकि मैं थोड़ा निराश हूं कि पीपी इस सुविधा का समर्थन नहीं करता है ... आपके विश्लेषण के लिए बहुत बहुत धन्यवाद। – Jihun

+1

यह उत्तर पुराना है। नीचे Plasmatium का जवाब देखें। –

24

अंतिम इस समस्या

हल करने के लिए क्योंकि सभी ग/सीपीपी फ़ाइलों make सराहना का उपयोग करके संकलित किया जाएगा मार्ग, और make एक विकल्प है जो कितने सीपीयू कोर स्रोत संकलित करने के लिए इस्तेमाल किया जा shoule निर्दिष्ट है कोड, हम make पर कुछ चाल कर सकते हैं।

  1. बैकअप अपने मूल make आदेश:

    sudo cp /usr/bin/make /usr/bin/make.bak

  2. एक "नकली" make आदेश है, जो अपने पैरामीटर सूची में --jobs=6 संलग्न करें और उन्हें मूल मेकअप आदेश make.bak को पारित करेंगे लिखें:

    make.bak --jobs=6 [email protected]

तो उसके बाद, सी libs के साथ अजगर संकलित भी नहीं, बल्कि दूसरों में सी libs 6 कोर द्वारा संकलन पर तेजी होगी। असल में make कमांड का उपयोग करके संकलित सभी फाइलें तेज हो जाएंगी।

और शुभकामनाएं।


उपयोग: --install-विकल्प = "- नौकरियों = 6"

pip3 install --install-option="--jobs=6" PyXXX 

मेरे पास एक ही मांग है जो संकलन प्रगति को गति देने के लिए पाइप इंस्टॉल का उपयोग करें। मेरा लक्ष्य पीकेजी पायसाइड है। सबसे पहले मैं pip3 install pyside का उपयोग करता हूं, मुझे लगभग 30 मिनट (एएमडी 1055T 6-कोर, 10 जी रैम) लगता है, केवल एक कोर 100% लोड लेता है।

pip3 --help में कोई सुराग नहीं है, लेकिन मैं pip install -u pyXXX की तरह बहुत सारे विकल्प मिल गया है, लेकिन मैं नहीं जानता था कि क्या '-u' है और इस पैरामीटर भी pip --help में नहीं था। मैंने 'pip3 install --help' की कोशिश की और जवाब आया: - स्थापना-विकल्प

मैंने पायसाइड के कोड के कोड को पढ़ा और एक और सुराग पाया: OPTION_JOBS = has_option('jobs'), मैंने ipdb.set_trace() वहां रखा है और अंत में यह समझते हैं कि पाइप इंस्टॉल का उपयोग करके संकलित करने के लिए मल्टीकोर का उपयोग कैसे करें।

मुझे लगभग 6 मिनट लग गए।

-------------------------- अद्यतन ------------------- -----------

नीचे टिप्पणी के रूप में, मैं अंत में इस तरह चाल का इस्तेमाल किया: cd /usr/bin sudo mv make make.bak touch make फिर संपादित करें: vim make या अन्य तरीके से आप की तरह है और इस टाइप करें: make.bak --jobs=6 $* मैं बैश से परिचित नहीं हूं, इसलिए मुझे यकीन नहीं है कि यह कोर्रेक्ट बैश कोड है या नहीं। मैं विंडोज़ में यह टिप्पणी लिख रहा हूं। कुंजी का नाम बनाने का नाम है। बाक, और उसके बाद एक नया मेक बनाएं, अतिरिक्त पैरा के साथ make.bak को कॉल करने के लिए इस नए मेक का उपयोग करें --jobs = 6

+0

काम करने लगता है - जब मैं इसे इस तरह से चलाता हूं तो मेरे सभी कोर पर प्रोसेसर लोड बढ़ता है। – BenB

+0

मुझे चेतावनी मिलती है 'उपयोगकर्ता चेतावनी: --build-options/--global-options/--install-options.' के उपयोग के कारण पहियों के सभी उपयोग को अक्षम करना। यह समझ में आता है, लेकिन क्या यह संभव है कि एकाधिक कोर का उपयोग करने के प्रदर्शन लाभ पहियों का उपयोग न करने के प्रदर्शन हिट से अधिक हो? यह किस पर निर्भर करता है? – max

+0

पाइप के लिए क्या (पीपी 3 नहीं) के बारे में क्या? मुझे मिल रहा है: 'त्रुटि: विकल्प - जॉब्स पहचाना नहीं गया' – timotheecour

संबंधित मुद्दे