Почему мой поток выполняется перед запуском и пропустить пока isAlive? - PullRequest
0 голосов
/ 28 апреля 2020

Итак, я пишу программу для загрузки определенного файла на определенный сервер sftp. В поисках реализации ожидающей анимации во время загрузки файла я написал это

def uploadFile(file):
    sys.stdout.write('\r'+f'Uploading \n')
    # sftp actions
    sys.stdout.write('\r'+f'Uploaded\n')

def uploadList(list)
    for files in list:
    upload = threading.Thread(name='process', target=uploadFile(file))
    upload.start()
    while upload.isAlive:
        animated_loading()

, однако, когда я запускаю скрипт, программа выполняет функцию uploadFile перед командой запуска и, следовательно, не запускает animated_loading. Почему и как я могу это исправить?

1 Ответ

0 голосов
/ 28 апреля 2020

Это вызов для функции uploadFile (...):

uploadFile(file)

Это ваш основной поток , вызывающий uploadFile(file) и затем создайте новый поток, используя возвращаемое значение из вызова uploadFile(file) в качестве target потока.

threading.Thread(name='process', target=uploadFile(file))

То есть, используя None в качестве target потому что uploadFile(...) не возвращает никакого значения.


Вы, вероятно, хотели бы сделать это вместо этого:

threading.Thread(name='process', target=uploadFile, args=(file))

Это создаст новый поток, target которого равен uploadFile функция. Новый поток вызовет uploadFile и передаст ему значение args после того, как поток start() ed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...