Ich versuche, 2 Funktionen zur gleichen Zeit laufen zu lassen.Machen Sie 2 Funktionen zur gleichen Zeit
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
Weiß jemand, wie man das macht?
Ich versuche, 2 Funktionen zur gleichen Zeit laufen zu lassen.Machen Sie 2 Funktionen zur gleichen Zeit
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
Weiß jemand, wie man das macht?
tun:
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()
Vielleicht möchte er wissen, dass sie wegen der Global Interpreter Lock nicht zur genau gleichen Zeit ausgeführt werden, selbst wenn die Maschine mehrere CPUs hat. http://wiki.python.org/moin/GlobalInterpreterLock –
@joaquin - Ihr Recht, leider vergessen, die Funktionen nach dem Kopieren und Einfügen zu entfernen. – chrissygormley
das Forkbombs mein System. – KI4JGT
The answer about threading ist gut, aber man braucht ein bisschen genauer zu sein, was Sie tun wollen.
Wenn Sie zwei Funktionen haben, die beide eine Menge CPU verwenden, wird Threading (in CPython) wahrscheinlich nirgendwohin führen. Dann möchten Sie vielleicht einen Blick auf die multiprocessing module werfen oder möglicherweise möchten Sie jython/IronPython verwenden.
Wenn CPU-gebundene Leistung der Grund ist, könnten Sie sogar Dinge in (ohne Gewinde) C implementieren und eine viel größere Beschleunigung als täte zwei parallele Dinge in Python bekommen.
Ohne weitere Informationen ist es nicht einfach, eine gute Antwort zu finden.
Die Methode erscheint das threading
Modul (beschrieben in another Antwort auf diese Frage) zu
laufen zwei Funktionen gleichzeitig zu arbeiten, aber tatsächlich eine kleine Verzögerung zwischen, wie
im Official Python Documentation angegeben. Eine bessere Lösung, um stattdessen zu versuchen, ist die Verwendung der multiprocessing module.
Außerdem gibt es einige andere nützliche Python-Module, die für die asynchrone Ausführung verwendet werden können (zwei Codeteile gleichzeitig). Für einige Informationen darüber, welche Option am besten geeignet ist, besuchen Sie die Stack Overflow-Frage unter https://stackoverflow.com/q/2629680/3787376
).
Zitat aus der offiziellen Python-Dokumentation über threading module
nicht funktioniert:
CPython Implementierung Detail: In CPython aufgrund des globalen Interpreter Lock, nur ein Thread zu Python-Code ausführen kann einmal (auch obwohl bestimmte leistungsorientierte Bibliotheken diese Einschränkung überwinden könnten). Wenn Sie Ihre Anwendung eine bessere Nutzung der die Rechenressourcen von Multi-Core-Maschinen zu machen, werden Sie zu Verwendung Multiprozessing oder concurrent.futures.ProcessPoolExecutor beraten. Threading ist jedoch immer noch ein geeignetes Modell, wenn Sie gleichzeitig mehrere I/O-gebundene Tasks ausführen möchten.
threading module
:
Er könnte, dass sie wegen des Global Interpreter Lock wollen wissen, wird auf die exakt gleiche Zeit, auch wenn die Maschine nicht ausführen in Frage hat mehrere CPUs. wiki.python.org/moin/GlobalInterpreterLock
- Jonas Elfström Jun 2 '10 at 11:39
Ich füge time.time() am Ende jeder print() -Funktion an und beschränke die Schleife auf 9 mal auf den Code der anderen Antwort. Hier ist, was ich in meinem Terminal sehe: ('a', 1509314761.857559) ('a', 1509314761.857664) ('a', 1509314761.85767) ('a', 1509314761.857675) ('a', 1509314761.85768) ('a', 1509314761.857685) ("a", 1509314761.85769) ("a", 1509314761.857695) ("a", 1509314761.857699) ("b", 1509314761, 858138) ("b ', 1509314761.858224) (" b', 1509314761.858229) ("b ', 1509314761.858234) ('b', 1509314761.858239) ('b', 1509314761.858244) ('b', 1509314761.858249) ('b', 1509314761.858253) ('b', 1509314761.858258) – weefwefwqg3
Selbst mit Multiprocessing ist es nicht wirklich gleichzeitig Ritus? Einer läuft dem anderen nach. – weefwefwqg3
Meine alte Antwort, die schlecht geschrieben wurde (verbesserte Inhalte, machte es klarer und formatiert/strukturiert besser) gereinigt. – Edward
ich diesen Code lief, wenn die Funktionen zur gleichen Zeit laufen zu überprüfen:
#! /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()
Dies ist, was es gibt:
1447425262.16 1447425263.16
Zu mir dies scheint, als ob die Funktionen nacheinander laufen ...?
Sie laufen nacheinander ab, wie Ihr Experiment beweist, wie [die offizielle Python-Dokumentation sagt] (https://docs.python.org/3.3/library/threading.html). Ich habe dieses Zitat auch auf die gleiche Frageseite gesetzt ([zu meiner Antwort] (http://stackoverflow.com/a/33064260/3787376)). – Edward
Bis zur Party aber: Der Grund, warum dies verwirrend scheint, ist, dass der Parameter 'target' im Konstruktor 'Thread' nicht die Funktionen 'time1' und 'time2' ist, sondern die Rückgabewerte von 'time1()' und ' time2() '(siehe Klammern). Im Wesentlichen führen Sie zwei Threads mit "target = None" aus. Die beiden Funktionen werden beim Erstellen der Threads ausgeführt, nicht beim Starten. Hoffnung, die jede Verwirrung aufhebt. –
Es zeigt ein anderes Timing für mich .. Es läuft nicht zur gleichen Zeit – lalithkumar
Mögliche Duplikate von [Python: Wie kann ich Python-Funktionen parallel ausführen?] (Http://stackoverflow.com/questions/7207309/python-how-can-i-run-python-functions-in-parallel) – OrangeDog