如何在线程语法 python 中正确使用 args?

How to correctly use args in thread syntax python?

完整代码:

from code import InteractiveConsole
from turtle import position
import cv2 as cv
from time import time
from windowcapture import WindowCapture
from vision import Vision
import pyautogui
from paths import Products
from time import sleep
from functions import click
from threading import Thread

def do_Collect(self, cord_produto=None, produto=None):
bot_running = True
print(produto)
print(type(produto))
if produto == 'trigo':
    bot_status = produto
    for cord in cord_produto:
        offset_x = 0
        offset_y = 0
        cord_x = cord[0] + offset_x
        cord_y = cord[1] + offset_y
        print(f' Colhendo {produto} nas cordenadas: {cord}')
        print(f'Quantidade de cordadenas encontradas {len(cord_produto)}')
        click(cord_x , cord_y)
    sleep(2)
# else:
#     raise Exception('!Exceção! Produto: {produto} e Cordenadas: {cord_produto}')
bot_running = False
bot_status = None        
###

while(True):
    screenshot = wincap.get_screenshot() #PyAutoGui Tira o ScreenShot
    positions_trigo = vision_Trigo.find(screenshot, 0.6, 'rectangles') 

    ###
    #Bot Commands Call
    if not bot_running:
        print('bot parado')
        if len(positions_trigo):
            trigo = 'trigo'
            t = Thread(target=do_Collect, args=(positions_trigo, trigo))
            t.start()
    positions_trigo = ''
    ###
    
    #Print FPS
    print('FPS: {}'.format(1/(time()-loop_time)))
    loop_time = time()
    
    #Wait Key Q
    if cv.waitKey(1) == ord('q'): #Espera a tecla Q ser apertada para sair
        cv.destroyAllWindows()
        break
    
print('Programa Finalizado')

Thread 函数中的“trigo”是我的问题。 我正在尝试将超过 1 个参数从线程传递给函数 *args。

t = Thread(target=do_Collect, args=(positions_trigo, trigo)) #Does not work

如果我不使用“trigo”,它会起作用。

t = Thread(target=do_Collect, args=(positions_trigo,)) #Work

当我测试可调用函数的变量时,我只收到标准值“None”。所以下面的函数永远不会为真。

def do_Collect(self, cord_produto=None, produto=None):
bot_running = True
print(produto)
print(type(produto))
if produto == 'trigo': #always false

我需要纠正什么?

您的方法声明包含 self,但未包含在 class 中。如果您删除 self.

它可能会起作用

下次请创建一个 MRE,即用最少的代码重现问题的示例,如下所示:

def do_Collect(self, cord_produto=None, produto=None):
    print(cord_produto, produto)

from threading import Thread
t = Thread(target=do_Collect, args=("a", "b"))
t.start()
t.join()

删除 self 即可。