मैं एक ही समय में 2 फ़ंक्शन चलाने की कोशिश कर रहा हूं।एक ही समय में 2 फ़ंक्शन चलाएं
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
क्या कोई यह जानता है कि यह कैसे करें?
मैं एक ही समय में 2 फ़ंक्शन चलाने की कोशिश कर रहा हूं।एक ही समय में 2 फ़ंक्शन चलाएं
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
क्या कोई यह जानता है कि यह कैसे करें?
यह करें:
import threading
from threading import Thread
def func1():
print 'Working'
def func2():
print 'Working'
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
वह जानना चाहेंगे कि ग्लोबल इंटरप्रेटर लॉक की वजह से वे एक ही समय में निष्पादित नहीं होंगे, भले ही मशीन में प्रश्न एकाधिक CPUs हों। http://wiki.python.org/moin/GlobalInterpreterLock –
@joaquin - आपका अधिकार, क्षमा करें कॉपी और पेस्ट के बाद फ़ंक्शन निष्कर्ष निकालना भूल गया। – chrissygormley
यह मेरे सिस्टम फोर्कबॉम्ब। – KI4JGT
The answer about threading अच्छा है, लेकिन आप थोड़ा अधिक है कि आप क्या करना चाहते हैं के बारे में विशिष्ट होने की जरूरत है।
आप दो कार्य है कि दोनों सीपीयू का एक बहुत, सूत्रण का उपयोग करें (CPython में) शायद आप कहीं नहीं मिल जाएगा। तो आप multiprocessing module पर एक नज़र डालना चाहते हैं या संभवतः आप ज्योथन/आयरनपीथन का उपयोग करना चाहेंगे।
यदि सीपीयू-बाउंड प्रदर्शन कारण है, तो आप चीजों को भी (गैर-थ्रेडेड) सी में कार्यान्वित कर सकते हैं और पाइथन में दो समांतर चीजों को करने से बहुत अधिक गति प्राप्त कर सकते हैं।
अधिक जानकारी के बिना, यह एक अच्छा जवाब के साथ आने के लिए आसान नहीं है।
विधि एक ही समय में दो कार्य
रन threading
मॉड्यूल (इस सवाल का जवाब another में वर्णित) का उपयोग कर काम करने के लिए प्रकट होता है, लेकिन वास्तव में के बीच एक छोटे से अधिक विलंबित होती है, के रूप में
Official Python Documentation में कहा गया है। इसके बजाय प्रयास करने का एक बेहतर समाधान multiprocessing module का उपयोग कर रहा है।
इसके अलावा, वहाँ कुछ अन्य उपयोगी अजगर मॉड्यूल है कि अतुल्यकालिक निष्पादन (एक ही समय में दो कोड) के लिए इस्तेमाल किया जा सकता है। चुनने के लिए सबसे अच्छा कौन सा है, इस बारे में कुछ जानकारी के लिए, https://stackoverflow.com/q/2629680/3787376
पर स्टैक ओवरफ़्लो प्रश्न देखें)। आधिकारिक अजगर प्रलेखन से
उद्धरण के बारे में threading module
काम नहीं कर रहा:
CPython कार्यान्वयन विस्तार: CPython में, वैश्विक दुभाषिया लॉक की वजह से है, केवल एक धागा अजगर कोड निष्पादित कर सकते हैं एक ही बार में (यहां तक कि हालांकि कुछ प्रदर्शन-उन्मुख पुस्तकालय इस सीमा को पार कर सकते हैं)। आप का बेहतर उपयोग करने के लिए आपके आवेदन चाहते हैं मल्टी कोर मशीनों के कम्प्यूटेशनल संसाधनों, आप उपयोग बहु या concurrent.futures.ProcessPoolExecutor सलाह दी जाती है। हालांकि, यदि आप एकाधिक I/O-bound कार्यों को एक साथ चलाने के लिए चाहते हैं तो थ्रेडिंग अभी भी एक उपयुक्त मॉडल है।
threading module
के बारे में किसी अन्य उपयोगकर्ता से A comment:
वह पता चला है कि वैश्विक दुभाषिया लॉक की वजह से वे ठीक उसी समय भी मशीन अगर पर अमल नहीं होगा चाहते हो सकता है प्रश्न में एकाधिक CPUs हैं। wiki.python।org/मोइन/GlobalInterpreterLock
- जोनास Elfström Jun 2 '10 at 11:39
मैं प्रत्येक प्रिंट() फ़ंक्शन के अंत में time.time() जोड़ता हूं और दूसरे उत्तर के कोड पर लूप को 9 गुना सीमित करता हूं। यहां मैं अपने टर्मिनल में देखता हूं: ('ए', 150 9 314761.857559) ('ए', 150 9314761.857664) ('ए', 150 9314761.85767) ('ए', 150 9314761.857675) ('ए', 150 9314761.85768) ('ए', 150 9314761.857685) ('ए', 150 9 314761.8576 9) ('ए', 150 9314761.8576 9 5) ('ए', 150 9314761.8576 99) ('बी', 150 9314761.8582238) ('बी', 150 9314761.858224) ('बी', 150 9314761.85822 9) ('बी', 150 9314761.858234) ('बी', 150 9 314761.858239) ('बी', 150 9314761.858244) ('बी', 150 9314761.85824 9) ('बी', 150 9314761.858253) ('बी', 150 9314761.858258) – weefwefwqg3
मल्टीप्रोसेसिंग के साथ भी, यह वास्तव में समवर्ती संस्कार नहीं है? एक दूसरे के बाद चलता है। – weefwefwqg3
मेरा पुराना उत्तर साफ़ किया गया जो बुरी तरह लिखा गया था (बेहतर सामग्री, इसे स्पष्ट और स्वरूपित/संरचित बेहतर बनाया गया)। – Edward
कार्यों एक साथ चलाए अगर मैं जाँच करने के लिए इस कोड को भाग गया:
#! /usr/bin/env python
import threading
from threading import Thread
import time
def time1():
time.sleep(1)
print time.time()
def time2():
time.sleep(1)
print time.time()
if __name__ == '__main__':
Thread(target = time1()).start()
Thread(target = time2()).start()
यह यह क्या देता है:
1447425262.16 1447425263.16
मेरे लिए यह ऐसा लगता है कि दूसरे के बाद चलने वाले कार्यों की तरह ...?
वे आपके प्रयोग की तरह दूसरे के बाद एक चलाते हैं, क्योंकि [आधिकारिक पायथन दस्तावेज कहता है] (https://docs.python.org/3.3/library/threading.html)। मैंने इस उद्धरण को उसी प्रश्न पृष्ठ पर भी शामिल किया ([मेरे उत्तर पर] (http://stackoverflow.com/a/33064260/3787376))। – Edward
पार्टी के लिए देर हो चुकी है लेकिन: यह कारण भ्रमित प्रतीत हो सकता है कि 'थ्रेड' कन्स्ट्रक्टर में 'लक्ष्य' पैरामीटर फ़ंक्शन 'टाइम 1' और 'टाइम 2' नहीं है, बल्कि इसके बजाय 'time1()' और ' समय 2() '(नोट parantheses)। तो अनिवार्य रूप से, आप 'लक्ष्य = कोई नहीं' के साथ दो धागे चला रहे हैं। जब आप थ्रेड बनाते हैं तो दो फ़ंक्शन चलते हैं, न कि जब आप उन्हें प्रारंभ करते हैं। उम्मीद है कि किसी भी भ्रम को साफ करता है। –
यह मेरे लिए अलग-अलग समय दिखाता है..यह एक ही समय में नहीं चल रहा है – lalithkumar
[पाइथन: मैं पाइथन फ़ंक्शन को समानांतर में कैसे चला सकता हूं?] (Http://stackoverflow.com/questions/7207309/python-how-can-i-run-python-functions-in-parallel) – OrangeDog