Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Tôi đang cố gắng chạy 2 chức năng cùng một lúc.

def func1():
    print('Working')

def func2():
    print('Working')

func1()
func2()

Có ai biết cách để làm điều này không?

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Đã hỏi ngày 2 tháng 6 năm 2010 lúc 11:16Jun 2, 2010 at 11:16

1

Làm cái này:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()

Đã trả lời ngày 2 tháng 6 năm 2010 lúc 11:19Jun 2, 2010 at 11:19

Chrisgchrisgchrisg

39.1k35 Huy hiệu vàng85 Huy hiệu bạc106 Huy hiệu đồng35 gold badges85 silver badges106 bronze badges

9

Câu trả lời về luồng là tốt, nhưng bạn cần phải cụ thể hơn một chút về những gì bạn muốn làm.

Nếu bạn có hai chức năng mà cả hai đều sử dụng nhiều CPU, việc xâu chuỗi (trong CPython) có thể sẽ không đưa bạn đến đâu. Sau đó, bạn có thể muốn xem mô -đun đa xử lý hoặc có thể bạn có thể muốn sử dụng Jython/Ironpython.

Nếu hiệu suất liên kết của CPU là lý do, bạn thậm chí có thể thực hiện mọi thứ trong (không có luồng) C và có được tốc độ tăng tốc lớn hơn nhiều so với thực hiện hai việc song song trong Python.

Không có thêm thông tin, không dễ dàng đưa ra câu trả lời tốt.

Đã trả lời ngày 2 tháng 6 năm 2010 lúc 11:38Jun 2, 2010 at 11:38

Mattias Nilssonmattias NilssonMattias Nilsson

3,5841 Huy hiệu vàng23 Huy hiệu bạc29 Huy hiệu đồng1 gold badge23 silver badges29 bronze badges

Điều này có thể được thực hiện một cách thanh lịch với Ray, một hệ thống cho phép bạn dễ dàng song song hóa và phân phối mã python của bạn.

Để song song hóa ví dụ của bạn, bạn cần xác định các chức năng của mình với

import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
0, sau đó gọi chúng bằng
import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
1.

import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])

Nếu

import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
2 và
import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
3 Kết quả trả về, bạn cần viết lại mã trên một chút, bằng cách thay thế
import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
4 bằng:

ret_id1 = func1.remote()
ret_id2 = func1.remote()
ret1, ret2 = ray.get([ret_id1, ret_id2])

Có một số lợi thế của việc sử dụng Ray so với mô -đun đa xử lý hoặc sử dụng đa luồng. Cụ thể, cùng một mã sẽ chạy trên một máy cũng như trên một cụm máy.same code will run on a single machine as well as on a cluster of machines.

Để biết thêm lợi thế của Ray, hãy xem bài viết liên quan này.

Đã trả lời ngày 4 tháng 2 năm 2019 lúc 0:39Feb 4, 2019 at 0:39

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Ion stoicaion stoicaIon Stoica

7079 Huy hiệu bạc7 Huy hiệu đồng9 silver badges7 bronze badges

0

Một tùy chọn, có vẻ như nó làm cho hai chức năng chạy cùng một lúc, đang sử dụng mô -đun

import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
5 (ví dụ trong câu trả lời này).
time, is using the
import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
5 module (example in this answer).

Tuy nhiên, nó có một độ trễ nhỏ, như một trang tài liệu Python chính thức mô tả. Một mô -đun tốt hơn để thử sử dụng là

import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
6.
page describes. A better module to try using is
import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
6.

Ngoài ra, có các mô -đun Python khác có thể được sử dụng để thực thi không đồng bộ (hai đoạn mã hoạt động cùng một lúc). Để biết một số thông tin về họ và giúp chọn một, bạn có thể đọc câu hỏi Overflow Stack này.

Nhận xét từ người dùng khác về mô -đun import ray ray.init() # Define functions you want to execute in parallel using # the ray.remote decorator. @ray.remote def func1(): print("Working") @ray.remote def func2(): print("Working") # Execute func1 and func2 in parallel. ray.get([func1.remote(), func2.remote()]) 5

Anh ta có thể muốn biết rằng vì khóa phiên dịch toàn cầu, họ sẽ không thực thi chính xác cùng một lúc ngay cả khi máy trong câu hỏi có nhiều CPU. wiki.python.org/moin/globalinterpreterlock
they will not execute at the exact same time even if the machine in
question has multiple CPUs. wiki.python.org/moin/GlobalInterpreterLock

- Jonas Elfström ngày 2 tháng 6 '10 lúc 11:39

Trích dẫn từ tài liệu về mô -đun import ray ray.init() # Define functions you want to execute in parallel using # the ray.remote decorator. @ray.remote def func1(): print("Working") @ray.remote def func2(): print("Working") # Execute func1 and func2 in parallel. ray.get([func1.remote(), func2.remote()]) 5 không hoạt động

Chi tiết triển khai CPython: Trong CPython, do khóa phiên dịch toàn cầu, chỉ một luồng có thể thực thi mã python cùng một lúc (mặc dù các thư viện định hướng hiệu suất nhất định có thể khắc phục giới hạn này).
Lock, only one thread can execute Python code at once (even though
certain performance-oriented libraries might overcome this limitation).

Nếu bạn muốn ứng dụng của mình sử dụng tốt hơn các tài nguyên tính toán của các máy đa lõi, bạn nên sử dụng đa xử lý hoặc đồng thời. Tuy nhiên, luồng vẫn là một mô hình thích hợp nếu bạn muốn chạy đồng thời nhiều tác vụ ràng buộc I/O.
However, threading is still an appropriate model if you
want to run multiple I/O-bound tasks simultaneously.

Đã trả lời ngày 11 tháng 10 năm 2015 lúc 11:07Oct 11, 2015 at 11:07

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

EdwardedwardEdward

1.0241 Huy hiệu vàng18 Huy hiệu bạc39 Huy hiệu đồng1 gold badge18 silver badges39 bronze badges

4

Mô -đun luồng hoạt động đồng thời không giống như đa xử lý, nhưng thời gian hơi tắt. Mã bên dưới in "1" và "2". Chúng được gọi bởi các chức năng khác nhau tương ứng. Tôi đã nhận thấy rằng khi được in vào bảng điều khiển, chúng sẽ có thời gian hơi khác nhau.

from threading import Thread

def one():
    while(1 == num):
        print("1")
        time.sleep(2)
    
def two():
    while(1 == num):
        print("2")
        time.sleep(2)


p1 = Thread(target = one)
p2 = Thread(target = two)

p1.start()
p2.start()

Đầu ra: (Lưu ý không gian là để chờ ở giữa in)

1
2

2
1

12
   
21

12
   
1
2

Không chắc chắn nếu có một cách để sửa chữa điều này, hoặc nếu nó quan trọng. Chỉ là một cái gì đó tôi nhận thấy.

Đã trả lời ngày 28 tháng 7 năm 2018 lúc 4:59Jul 28, 2018 at 4:59

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Thử cái này

from threading import Thread

def fun1():
    print("Working1")
def fun2():
    print("Working2")

t1 = Thread(target=fun1)
t2 = Thread(target=fun2)

t1.start()
t2.start()

Đã trả lời ngày 27 tháng 6 năm 2018 lúc 13:34Jun 27, 2018 at 13:34

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

2

Tôi nghĩ rằng những gì bạn đang cố gắng truyền đạt có thể đạt được thông qua đa xử lý. Tuy nhiên, nếu bạn muốn làm điều đó thông qua các chủ đề, bạn có thể làm điều này. Điều này có thể giúp

from threading import Thread
import time

def func1():
    print 'Working'
    time.sleep(2)

def func2():
    print 'Working'
    time.sleep(2)

th = Thread(target=func1)
th.start()
th2=Thread(target=func2)
th2.start()

Đã trả lời ngày 14 tháng 8 năm 2018 lúc 12:22Aug 14, 2018 at 12:22

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Kiểm tra bằng cách sử dụng apscheduler:

from apscheduler.schedulers.background import BackgroundScheduler
import datetime

dt = datetime.datetime
Future = dt.now() + datetime.timedelta(milliseconds=2550)  # 2.55 seconds from now testing start accuracy

def myjob1():
    print('started job 1: ' + str(dt.now())[:-3])  # timed to millisecond because thats where it varies
    time.sleep(5)
    print('job 1 half at: ' + str(dt.now())[:-3])
    time.sleep(5)
    print('job 1 done at: ' + str(dt.now())[:-3])
def myjob2():
    print('started job 2: ' + str(dt.now())[:-3])
    time.sleep(5)
    print('job 2 half at: ' + str(dt.now())[:-3])
    time.sleep(5)
    print('job 2 done at: ' + str(dt.now())[:-3])

print(' current time: ' + str(dt.now())[:-3])
print('  do job 1 at: ' + str(Future)[:-3] + ''' 
  do job 2 at: ''' + str(Future)[:-3])
sched.add_job(myjob1, 'date', run_date=Future)
sched.add_job(myjob2, 'date', run_date=Future)

Tôi đã nhận được những kết quả này. Điều đó chứng tỏ họ đang chạy cùng một lúc.

 current time: 2020-12-15 01:54:26.526
  do job 1 at: 2020-12-15 01:54:29.072  # i figure these both say .072 because its 1 line of print code
  do job 2 at: 2020-12-15 01:54:29.072
started job 2: 2020-12-15 01:54:29.075  # notice job 2 started before job 1, but code calls job 1 first.
started job 1: 2020-12-15 01:54:29.076  
job 2 half at: 2020-12-15 01:54:34.077  # halfway point on each job completed same time accurate to the millisecond
job 1 half at: 2020-12-15 01:54:34.077
job 1 done at: 2020-12-15 01:54:39.078  # job 1 finished first. making it .004 seconds faster.
job 2 done at: 2020-12-15 01:54:39.091  # job 2 was .002 seconds faster the second test

Đã trả lời ngày 15 tháng 12 năm 2020 lúc 10:14Dec 15, 2020 at 10:14

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Trong trường hợp bạn cũng muốn đợi cho đến khi cả hai chức năng được hoàn thành:wait until both functions have been completed:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
0

Đã trả lời ngày 4 tháng 7 năm 2021 lúc 10:28Jul 4, 2021 at 10:28

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

thanos.athanos.athanos.a

1.7882 huy hiệu vàng26 Huy hiệu bạc25 Huy hiệu đồng2 gold badges26 silver badges25 bronze badges

Một cách tiếp cận khác để chạy nhiều chức năng đồng thời trong Python là sử dụng

import ray

ray.init()

# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")

@ray.remote
def func2():
    print("Working")

# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
9 mà tôi không thể thấy trong câu trả lời.

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
1

Out:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
2

[NOTE]:NOTE]:

  • Cú pháp
    import ray
    
    ray.init()
    
    # Define functions you want to execute in parallel using 
    # the ray.remote decorator.
    @ray.remote
    def func1():
        print("Working")
    
    @ray.remote
    def func2():
        print("Working")
    
    # Execute func1 and func2 in parallel.
    ray.get([func1.remote(), func2.remote()])
    
    9 ở trên có giá trị trên Python 3.7 trở lên
  • Đa xử lý VS MultiThreading Vs Asyncio

Đã trả lời ngày 19 tháng 10 lúc 6:15Oct 19 at 6:15

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Mã này dưới đây có thể chạy 2 chức năng Parallelly:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
3

Result:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
4

Và, 2 bộ mã bên dưới có thể chạy đồng thời 2 chức năng:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
5
from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
6

Result:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
4

Và, mã này dưới đây có thể chạy 2 chức năng

ret_id1 = func1.remote()
ret_id2 = func1.remote()
ret1, ret2 = ray.get([ret_id1, ret_id2])
1 đồng thời và không đồng bộ:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
8

Result:

from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
4

Đã trả lời ngày 27 tháng 10 lúc 16:09Oct 27 at 16:09

Hướng dẫn how do you run multiple threads at a time in python? - làm thế nào để bạn chạy nhiều chủ đề cùng một lúc trong python?

Kai - Kazuya Itokai - Kazuya ItoKai - Kazuya Ito

Huy hiệu vàng 11.5k671 Huy hiệu bạc88 Huy hiệu đồng6 gold badges71 silver badges88 bronze badges

Python có thể chạy nhiều chủ đề cùng một lúc không?

Để tóm tắt lại, luồng trong Python cho phép nhiều luồng được tạo trong một quy trình duy nhất, nhưng do Gil, không ai trong số chúng sẽ chạy cùng một lúc.Chủ đề vẫn là một lựa chọn rất tốt khi chạy nhiều tác vụ ràng buộc I/O đồng thời.threading in Python allows multiple threads to be created within a single process, but due to GIL, none of them will ever run at the exact same time. Threading is still a very good option when it comes to running multiple I/O bound tasks concurrently.

Nhiều luồng có thể chạy cùng một lúc không?

Trong một quy trình hoặc chương trình, chúng tôi có thể chạy nhiều luồng đồng thời để cải thiện hiệu suất.Các chủ đề, không giống như quy trình hạng nặng, nhẹ và chạy trong một quy trình duy nhất - chúng chia sẻ cùng một không gian địa chỉ, tài nguyên được phân bổ và môi trường của quy trình đó. to improve the performance. Threads, unlike heavyweight process, are lightweight and run inside a single process – they share the same address space, the resources allocated and the environment of that process.

Các chủ đề Python có thể chạy trên nhiều lõi không?

Do những hạn chế được đưa ra bởi Gil trong Python, các chủ đề không thể đạt được sự song song thực sự sử dụng nhiều lõi CPU.Đa xử lý không có bất kỳ hạn chế như vậy.Lập kế hoạch quy trình được xử lý bởi HĐH, trong khi lập lịch chủ đề được thực hiện bởi trình thông dịch Python.