Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python线程流的简洁控制_Python_Multithreading_Mutex - Fatal编程技术网

Python线程流的简洁控制

Python线程流的简洁控制,python,multithreading,mutex,Python,Multithreading,Mutex,我想上传一个文件到两个ftp站点。完成这两项后,我需要删除该文件。 如果不阻止主功能运行,ftp和删除功能都将通过线程实现,这意味着将有3个线程同时在后台运行。一个简单的问题因为线程而变得复杂 以下是可能的解决办法: 使用队列并将所有三个线程按顺序排列 使用互斥 这两种方法都有效,但我认为它们不是最好的方法。有人能分享他/她的想法吗 使用信号灯 在父处理程序中,创建一个0的信号量,并将其传递给线程 import threading sem = threading.Semaphore(0) h

我想上传一个文件到两个ftp站点。完成这两项后,我需要删除该文件。 如果不阻止主功能运行,ftp和删除功能都将通过线程实现,这意味着将有3个线程同时在后台运行。一个简单的问题因为线程而变得复杂

以下是可能的解决办法:

  • 使用队列并将所有三个线程按顺序排列
  • 使用互斥
  • 这两种方法都有效,但我认为它们不是最好的方法。有人能分享他/她的想法吗

    使用信号灯

    在父处理程序中,创建一个0的信号量,并将其传递给线程

    import threading
    
    sem = threading.Semaphore(0)
    
    hostThread = threading.Thread(target=uploadToHost, args=(sem,))
    backupThread = threading.Thread(target=uploadToBackup, args=(sem,))
    
    sem.acquire() # Wait for one of them to finish
    sem.acquire() # Wait for the other to finish
    
    在您的孩子中,上传完成后,您只需调用
    sem.release