Hướng dẫn how to pass multiple arguments to thread in python - cách truyền nhiều đối số vào chuỗi trong python

9

New! Save questions or answers and organize your favorite content.
Learn more.

The following code passes a list (varbinds) and it works fine.

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds,))

Now I need to pass another variable - vString along with this.

Please help with a simple code.

asked Nov 14, 2016 at 3:53

Hướng dẫn how to pass multiple arguments to thread in python - cách truyền nhiều đối số vào chuỗi trong python

Manoj Kumar MManoj Kumar M

851 gold badge1 silver badge9 bronze badges

4

The

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds, otherVariable))
1 parameter is a tuple, and allows you to pass many arguments to the target.

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))

This is documented here:

threading.Thread(group=None, target=None, name=None, args=(), kwargs={})

This constructor should always be called with keyword arguments. Arguments are:

group should be None; reserved for future extension when a ThreadGroup class is implemented.

target is the callable object to be invoked by the run() method. Defaults to None, meaning nothing is called.

name is the thread name. By default, a unique name is constructed of the form “Thread-N” where N is a small decimal number.

args is the argument tuple for the target invocation. Defaults to ().

kwargs is a dictionary of keyword arguments for the target invocation. Defaults to {}.

answered Nov 14, 2016 at 4:26

Right legRight leg

15.4k6 gold badges45 silver badges75 bronze badges

5

Tham số

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds, otherVariable))
1 là một tuple và cho phép bạn chuyển nhiều đối số cho mục tiêu.

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds, otherVariable))


Gợi ý: 2

Trong ví dụ sau, chúng tôi sẽ thực hiện nhiều luồng với hai luồng. Mỗi luồng chạy song song với tên kia và được thực thi bất cứ khi nào tài nguyên xử lý có sẵn cho nó., Ví dụ - Mutlithread với các đối số được truyền đến các luồng, trong ví dụ trước của chúng tôi, chúng tôi đã bắt đầu các luồng chỉ với mục tiêu của chúng. Bây giờ, chúng tôi sẽ chuyển một số lập luận cho họ. Ngoài ra, bạn có thể gọi cùng một mục tiêu cho các luồng khác nhau., Ví dụ - Python mutlithreading với hai luồng

Để tạo một luồng, bạn có thể sử dụng lớp Threading.Thread (). Cú pháp của lớp () lớp là:

threading.Thread(group = None, target = None, name = None, args = (), kwargs = {}, *, daemon = None)

Khi bạn đã tạo một luồng bằng lớp Delen (), bạn có thể khởi động nó bằng phương thức lead.start ().

t1 = threading.Thread()
t1.start()

Bạn có thể thực hiện bộ đếm chương trình của quy trình chính để đợi cho đến khi một chủ đề cụ thể kết thúc. Tất cả những gì bạn phải làm là gọi phương thức Jof () trên đối tượng luồng.


Gợi ý: 3

Tham số ARGS là một tuple và AnyCodings_Python cho phép bạn chuyển nhiều đối số cho mục tiêu anycodings_python. AnyCodings_Python mặc định là {}., Bây giờ tôi cần truyền một biến khác - anycodings_multithreading vString cùng với điều này. , Mã sau truyền một danh sách (varbinds) AnyCodings_MultithReading và nó hoạt động tốt.

Mã sau đây truyền một danh sách (varbinds) AnyCodings_MultithReading và nó hoạt động tốt.anycodings_multithreading and it works fine.

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds, ))

Tham số ARGS là một tuple và AnyCodings_Python cho phép bạn chuyển nhiều đối số cho mục tiêu AnyCodings_Python.anycodings_python allows you to pass many arguments to the anycodings_python target.

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds, otherVariable))


Gợi ý: 4

Cập nhật lần cuối: 01 tháng 2 năm 2022

  • Output:

  • Trong chương trình trên, nhiều đối số được chuyển đến hàm DisplayMessage () trong đó số lượng đối số được truyền đã được sửa.
  • Chúng ta có thể chuyển nhiều đối số cho hàm Python mà không cần định trước các tham số chính thức bằng cách sử dụng cú pháp dưới đây:

def functionName( * argument)


Gợi ý: 5

Trong tham số *arg, chúng ta có thể chuyển các đối số của các loại khác nhau. Ví dụ: cho phép truyền một danh sách, một tuple và chuỗi dưới dạng các đối số trong chức năng trên, * args tham số, tức là, Python cung cấp một cơ chế mà chúng ta có thể nhận được các đối số độ dài thay đổi trong hàm i.e với ký hiệu *. Tiền tố ký hiệu này * với bất kỳ tham số nào trong định nghĩa hàm sẽ làm cho tham số đó xử lý các đối số độ dài biến, tức là bên trong hàm này ARGS sẽ thuộc loại Tuple. Vì vậy, chúng ta có thể nhận được số lượng tổng số đối số được truyền bằng cách gọi hàm len () của tuple args, tức là xác định một hàm, chúng ta cũng có thể thêm các tham số khác cùng với *args. Nhưng chúng ta cần đảm bảo rằng tham số *args phải luôn luôn là sau các đối số chính thức, tức là.

Giả sử chúng ta có một hàm để tính trung bình 3 số, tức là.

def average(a, b, c):
   ''
' Function To calculate the average of 3 numbers '
''
return (a + b + c) / 3

Python cung cấp một cơ chế mà theo đó chúng ta có thể nhận được các đối số độ dài thay đổi trong hàm i.e với ký hiệu *. Tiền tố ký hiệu này * với bất kỳ tham số nào trong định nghĩa hàm sẽ làm cho tham số đó xử lý các đối số độ dài biến, tức là.* .
Prefixing this symbol * with any parameter in function definition will make that parameter handle variable length arguments i.e.

def calculateAverage( * args):
   ....
   ....


Gợi ý: 6

Khi chuyển nhiều đối số cho một luồng con, cách tiếp cận tiêu chuẩn là nhóm các đối số trong một tuyên bố cấu trúc, như được hiển thị trong danh sách mã 6.9. Địa chỉ của phiên bản cấu trúc được truyền dưới dạng arg cho pthread_create (). Điểm vào mới của chủ đề nhận được một tham số khoảng trống* mà sau đó có thể được chuyển vào loại cấu trúc., Một giải pháp phổ biến cho vấn đề này là đưa ra các giá trị số làm con trỏ, như trong danh sách mã 6.7. Đó là, biến INT tôi được sử dụng như một đối số (void*) trong cuộc gọi đến pthread_create (). Sau đó, đối số khoảng trống* cho child_thread () chuyển đối số trở lại một thể hiện int., Có ba cách phổ biến để lấy lại các giá trị trả về từ một luồng. Tất cả ba kỹ thuật sử dụng tương tự như các kỹ thuật được sử dụng để vượt qua các đối số. Danh sách mã 6.11 cho thấy một kỹ thuật đơn giản, đó là tăng cường khai báo cấu trúc để bao gồm không gian cho bất kỳ giá trị trả về nào. * loại hình. Khi một luồng gọi pthread_exit (), nó có thể chỉ định một con trỏ để trả về dưới dạng đối số.

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
0

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
1

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
2

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
3

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
4


Gợi ý: 7

Ví dụ này cho thấy cách thiết lập/vượt qua nhiều đối số thông qua một cấu trúc. Mỗi luồng nhận được một thể hiện duy nhất của cấu trúc., Đoạn mã này thể hiện cách truyền một số nguyên đơn giản cho mỗi luồng. Chủ đề gọi sử dụng cấu trúc dữ liệu duy nhất cho mỗi luồng, đảm bảo rằng mỗi đối số luồng vẫn còn nguyên vẹn trong suốt chương trình., Ví dụ này thực hiện đối số truyền không chính xác. Nó vượt qua địa chỉ của biến T, được chia sẻ không gian bộ nhớ và hiển thị cho tất cả các luồng. Khi vòng lặp lặp đi lặp lại, giá trị của vị trí bộ nhớ này thay đổi, có thể trước khi các luồng được tạo có thể truy cập nó. Đối với các trường hợp phải thông qua nhiều đối số, giới hạn này dễ dàng khắc phục bằng cách tạo một cấu trúc chứa tất cả các đối số, sau đó chuyển một con trỏ đến cấu trúc đó trong thói quen pthread_create ().

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
5

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
6

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
7

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
8

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
9

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds, otherVariable))
0


Làm thế nào để bạn chuyển nhiều đối số cho một chủ đề trong Python?

Do đó, bạn phải đặt một dấu phẩy, vì vậy nó được hiểu là một tuple: (lập luận,). Vì tuple này có nghĩa là chứa các đối số bạn chuyển đến hàm của luồng, chỉ cần đặt tất cả các đối số vào tuple, như tôi đã viết trong câu trả lời: (Arg1, Arg2, Arg3, Arg4).put a comma, so it is interpreted as a tuple: (argument, ) . Since this tuple is meant to contain the arguments you pass to the thread's function, just put all the arguments in the tuple, as I wrote in the answer: (arg1, arg2, arg3, arg4) .

Làm thế nào để bạn chuyển nhiều đối số cho một chủ đề?

Chuyển nhiều đối số cho các chủ đề.Khi chuyển nhiều đối số cho một luồng con, cách tiếp cận tiêu chuẩn là nhóm các đối số trong một tuyên bố cấu trúc, như được hiển thị trong danh sách mã 6.9.Địa chỉ của phiên bản cấu trúc được truyền dưới dạng arg cho pthread_create ().group the arguments within a struct declaration, as shown in Code Listing 6.9. The address of the struct instance gets passed as the arg to pthread_create() .

Bạn có thể chuyển đối số cho một chủ đề không?

Bạn chỉ có thể chuyển một đối số duy nhất cho hàm mà bạn đang gọi trong luồng mới.Tạo một cấu trúc để giữ cả hai giá trị và gửi địa chỉ của cấu trúc.Lưu câu trả lời này.. Create a struct to hold both of the values and send the address of the struct. Save this answer.

Bạn có thể thực hiện nhiều luồng trong Python không?

Python không hỗ trợ đa luồng vì Python trên trình thông dịch Cpython không hỗ trợ thực thi đa lõi thực sự thông qua đa luồng.Tuy nhiên, Python có một thư viện luồng.Gil không ngăn chặn luồng. because Python on the Cpython interpreter does not support true multi-core execution via multithreading. However, Python does have a threading library. The GIL does not prevent threading.