Hướng dẫn how do i run a sequentially thread in python? - làm cách nào để chạy một chuỗi tuần tự trong python?

13

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng sử dụng các chủ đề trong một dự án Python mà tôi đang thực hiện, nhưng các chủ đề dường như không hoạt động vì chúng được cho là trong mã của tôi. Có vẻ như tất cả các luồng chạy tuần tự [tức là Thread2 bắt đầu sau khi chủ đề 1 kết thúc, cả hai đều không bắt đầu cùng một lúc]. Tôi đã viết một tập lệnh đơn giản để kiểm tra điều này, và điều đó cũng chạy các chủ đề theo tuần tự.

import threading

def something[]:
    for i in xrange[10]:
        print "Hello"

def my_thing[]:
    for i in xrange[10]:
        print "world"   

threading.Thread[target=something].start[]
threading.Thread[target=my_thing].start[] 

Đây là đầu ra tôi nhận được từ việc chạy nó:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
world
world
world
world
world
world
world
world
world
world

Hành vi tương tự được quan sát với số lượng lặp lớn hơn nhiều của các vòng lặp.

Tôi đã thử tìm kiếm trên web và các câu trả lời cũ hơn, nhưng tôi không thể tìm thấy bất cứ điều gì có ích. Ai đó có thể vui lòng chỉ ra điều gì sai với mã này không?

Martineau

Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges

Đã hỏi ngày 8 tháng 11 năm 2009 lúc 19:11Nov 8, 2009 at 19:11

Hiện tại trong Python, các chủ đề được thay đổi sau khi thực hiện một số lượng hướng dẫn mã byte được chỉ định. Họ không chạy cùng một lúc. Bạn sẽ chỉ thực hiện các chủ đề song song khi một trong số chúng gọi một số mô-đun ảnh hưởng I/O hoặc không ảnh hưởng đến Python có thể phát hành Gil [khóa phiên dịch toàn cầu].

Tôi khá chắc chắn rằng bạn sẽ có được đầu ra trộn lẫn nếu bạn tăng số lượng vòng lặp lên một cái gì đó như 10000. Hãy nhớ rằng chỉ cần sinh sản chủ đề thứ hai cũng mất "rất nhiều" thời gian.

Đã trả lời ngày 8 tháng 11 năm 2009 lúc 19:45Nov 8, 2009 at 19:45

Viraptorviraptorviraptor

32.7k9 Huy hiệu vàng106 Huy hiệu bạc184 Huy hiệu đồng9 gold badges106 silver badges184 bronze badges

6

Trong thời gian, phải mất chủ đề thứ hai để bắt đầu các vòng lặp và in đầu tiên.

Ở đây có vẻ như thế này, bạn có thể thấy chủ đề thứ 2 bắt đầu sau khi lần đầu tiên phát ra một vài địa ngục.

Hello
Hello
Hello
Hello
Hello
Helloworld

Helloworld

Helloworld

Helloworld

Helloworld

world
world
world
world
world

BTW: Ví dụ của bạn không có ý nghĩa gì cả. Lý do duy nhất cho các chủ đề là IO và IO chậm. Khi bạn thêm một ít ngủ để mô phỏng IO, nó sẽ hoạt động như mong đợi:

import threading
from time import sleep

def something[]:
    for i in xrange[10]:
        sleep[0.01]
        print "Hello"

def my_thing[]:
    for i in xrange[10]:
        sleep[0.01]
        print "world"

threading.Thread[target=something].start[]
threading.Thread[target=my_thing].start[]

Một hỗn hợp hoang dã xuất hiện:

worldHello

Helloworld

Helloworld

worldHello

Helloworld

Helloworld

worldHello

Helloworld

worldHello

Helloworld

Martineau

Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges

Đã hỏi ngày 8 tháng 11 năm 2009 lúc 19:11Nov 8, 2009 at 19:15

Hiện tại trong Python, các chủ đề được thay đổi sau khi thực hiện một số lượng hướng dẫn mã byte được chỉ định. Họ không chạy cùng một lúc. Bạn sẽ chỉ thực hiện các chủ đề song song khi một trong số chúng gọi một số mô-đun ảnh hưởng I/O hoặc không ảnh hưởng đến Python có thể phát hành Gil [khóa phiên dịch toàn cầu].Jochen Ritzel

Tôi khá chắc chắn rằng bạn sẽ có được đầu ra trộn lẫn nếu bạn tăng số lượng vòng lặp lên một cái gì đó như 10000. Hãy nhớ rằng chỉ cần sinh sản chủ đề thứ hai cũng mất "rất nhiều" thời gian.29 gold badges196 silver badges191 bronze badges

2

Đã trả lời ngày 8 tháng 11 năm 2009 lúc 19:45

Viraptorviraptor

32.7k9 Huy hiệu vàng106 Huy hiệu bạc184 Huy hiệu đồng

Trong thời gian, phải mất chủ đề thứ hai để bắt đầu các vòng lặp và in đầu tiên.Nov 8, 2009 at 22:11

Ở đây có vẻ như thế này, bạn có thể thấy chủ đề thứ 2 bắt đầu sau khi lần đầu tiên phát ra một vài địa ngục.Dave Kirby

BTW: Ví dụ của bạn không có ý nghĩa gì cả. Lý do duy nhất cho các chủ đề là IO và IO chậm. Khi bạn thêm một ít ngủ để mô phỏng IO, nó sẽ hoạt động như mong đợi:5 gold badges64 silver badges82 bronze badges

Một hỗn hợp hoang dã xuất hiện:
Other than that, it is known that CPython's threads aren't perfect because of the GIL[PDF], which, in short, means that a lot of the times threads do run sequentially, or something of that sort.

Đã trả lời ngày 8 tháng 11 năm 2009 lúc 19:15Nov 8, 2009 at 19:21

Jochen Ritzeljochen Ritzelabyx

102K29 Huy hiệu vàng196 Huy hiệu bạc191 Huy hiệu Đồng18 gold badges91 silver badges116 bronze badges

1

Hành vi cũng có thể thay đổi tùy thuộc vào việc hệ thống đang sử dụng có bộ xử lý duy nhất hay nhiều bộ xử lý hay không, như được giải thích bởi bài nói chuyện này của David Beazley.

Note threading.Thread[target=threadSet1].start[] the function threadSet1 has not brackets at the end.

import threading
from time import sleep

def spawn[num, typex]:
    import time
    start = time.time[]
    print[num, typex]

def threadSet1[]:
    for i in range[1000]:
        sleep[0.01]
        t = threading.Thread[target=spawn[i, "world"]]
    t.daemon = True
    t.start[]
def threadSet2[]:
    for i in range[1000]:
        sleep[0.01]
        t = threading.Thread[target=spawn[i, "hello"]]
        t.daemon = True
        t.start[]
if __name__ == '__main__':
    threading.Thread[target=threadSet1].start[]
    threading.Thread[target=threadSet2].start[]

Như Viraptor nói, luồng đầu tiên sẽ phát hành GIL sau khi thực thi sys.getCheckInterval [] bytecodes [100 theo mặc định]. Để tóm tắt một cách thô bạo những gì David Beazley nói, trên một hệ thống bộ xử lý duy nhất, chủ đề thứ hai sau đó sẽ có cơ hội tiếp quản. Tuy nhiên, trên một hệ thống đa lõi, luồng thứ hai có thể chạy trên một lõi khác và luồng thứ nhất sẽ cố gắng làm lại khóa và có thể sẽ thành công vì HĐH sẽ không có thời gian để chuyển bộ xử lý. Điều này có nghĩa là trên một hệ thống đa lõi với một luồng liên kết CPU, các chủ đề khác có thể không bao giờ có được một cái nhìn.

Cách làm tròn này là thêm một câu lệnh ngủ cho cả hai vòng để chúng không còn bị ràng buộc CPU.Aug 25 at 4:26

Làm thế nào để bạn chạy nhiều luồng tại một thời điểm trong Python?

Để thực hiện luồng trong Python, bạn phải thực hiện ba bước: kế thừa lớp chứa chức năng bạn muốn chạy trong một luồng riêng biệt bằng cách sử dụng lớp luồng. Đặt tên cho chức năng bạn muốn thực thi trong một luồng chạy []. Gọi hàm start [] từ đối tượng của lớp chứa phương thức Run [].

Các chủ đề có thực thi tuần tự không?

Một luồng là một luồng kiểm soát tuần tự duy nhất trong một chương trình.Các chương trình bắt đầu, thực hiện một loạt các hướng dẫn và kết thúc.Trình tự thực thi là một chủ đề.Định nghĩa: Một luồng là một luồng kiểm soát tuần tự duy nhất trong một chương trình.. Programs start, execute a series of instructions, and end. The execution sequence is a thread. Definition: A thread is a single sequential flow of control within a program.

Làm cách nào để chạy một chức năng chủ đề trong Python?

Để chạy một hàm trong một luồng khác:..
Tạo một thể hiện của luồng.Lớp học ..
Chỉ định tên của chức năng thông qua đối số của mục tiêu trên mạng ..
Gọi hàm start [] ..

Bạn có thể tạo nhiều luồng để thực hiện cùng một hướng dẫn không?

Trong cùng một quy trình đa luồng trong môi trường đa bộ xử lý bộ nhớ chia sẻ, mỗi luồng trong quy trình có thể chạy đồng thời trên một bộ xử lý riêng biệt, dẫn đến thực thi song song, thực thi đồng thời thực sự.each thread in the process can run concurrently on a separate processor, resulting in parallel execution, which is true simultaneous execution.

Bài Viết Liên Quan

Chủ Đề