Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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/wxPython中对线程任务排序_Python_Wxpython - Fatal编程技术网

如何在Python/wxPython中对线程任务排序

如何在Python/wxPython中对线程任务排序,python,wxpython,Python,Wxpython,相对而言,wxPython和线程是新手,因此比较混乱 我有5个“步骤”必须对目标数据执行。这些步骤必须按给定顺序依次执行 为了保持GUI的响应性,我将每个步骤编码为一个单独的线程 当我手动完成该过程时(使用按钮启动每个步骤),我可以看到每个步骤在完成时更新显示 我不知道如何按顺序自动调用每个线程。如果我要创建一个标记为“一行完成所有5个步骤”的按钮,按钮调用的代码会是什么样子 我尝试过按顺序调用每个线程方法,但它们都试图同时对数据进行操作。每个线程都使用一个“with”和一个threading.

相对而言,wxPython和线程是新手,因此比较混乱

我有5个“步骤”必须对目标数据执行。这些步骤必须按给定顺序依次执行

为了保持GUI的响应性,我将每个步骤编码为一个单独的线程

当我手动完成该过程时(使用按钮启动每个步骤),我可以看到每个步骤在完成时更新显示

我不知道如何按顺序自动调用每个线程。如果我要创建一个标记为“一行完成所有5个步骤”的按钮,按钮调用的代码会是什么样子

我尝试过按顺序调用每个线程方法,但它们都试图同时对数据进行操作。每个线程都使用一个“with”和一个threading.Lock()来防止其他线程在给定线程运行时访问数据,但这些线程似乎没有以正确的顺序执行

正确的写作方法是什么

调用_thread1()
调用_thread2()
调用_thread3()
……等等


它将始终按照给定的顺序执行线程,并且只有在每个线程完成后才不会阻塞wx?

将gui中的等待步骤成员作为列表和线程完成处理程序,如果有下一个任务,它将从列表中弹出并启动线程

\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

OnDoAllClicked(self,evt)

检查下一个任务(自身)

在每个线程中:

   while not Done:
      # Do whatever
   wx.CallAfter(callbacK)

让gui的等待步骤成员作为列表和线程完成处理程序,如果有下一个任务,它将从列表中弹出并启动线程

\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

OnDoAllClicked(self,evt)

检查下一个任务(自身)

在每个线程中:

   while not Done:
      # Do whatever
   wx.CallAfter(callbacK)

我想我会采取不同的方法。我将调用一个线程,其中包含五个函数中的每一个。然后线程可以按顺序调用每个函数,当每个函数返回时,它可以使用GUI的线程安全方法(wx.CallAfter、wx.PostEvent)之一向GUI发送更新

以下是有关wxPython和线程的更多信息的两个参考资料:


    • 我想我会采用另一种方法。我将调用一个线程,其中包含五个函数中的每一个。然后线程可以按顺序调用每个函数,当每个函数返回时,它可以使用GUI的线程安全方法(wx.CallAfter、wx.PostEvent)之一向GUI发送更新

      以下是有关wxPython和线程的更多信息的两个参考资料:


      这是个好主意……也许是我最后做这件事的方式。有时我想在调用下一个线程之前在中间做一些其他的事情…或者调用一个无序的线程。我相信你可以使用几个可选参数,或者按照你想要的顺序列出选项。这是一个好主意…可能是我最后做这件事的方式。有时我想在调用下一个线程之前在中间做一些其他的事情…或者按顺序调用一个线程。我相信您可以使用几个可选参数,或者按照您希望的顺序列出选项。这就是我的想法,但是我该如何编写代码呢?我如何优雅地告诉GUI“在这里等待,直到最后一个线程完成,但仍然在正常循环中处理GUI内容?一个带有wx.Yield()、time.sleep()的while循环在它里面?上面添加的示例代码-您甚至可以在CheckNextTask开始时启用所有按钮,并在每次调用开始时禁用相应的按钮。\u thread这就是我的想法,但我该如何编写它?我如何优雅地告诉GUI“在这里等待,直到最后一个线程完成,但仍然在正常循环中处理GUI内容?一个while循环,里面有一个wx.Yield(),time.sleep()?上面添加的示例代码-您甚至可以在checknextask开始时启用所有按钮,并在每个调用开始时禁用相应的按钮。\u thread在
      wx
      调用的
      wx.lib.delayedresult
      中还有一个非常方便的启动线程库。函数
      startWorker
      接受两个参数,工作线程函数和在工作线程完成后调用的使用者函数。还有一个非常方便的库,用于在
      wx
      中启动线程,名为
      wx.lib.delayedresult
      。函数
      startWorker
      接受两个参数,辅助线程函数和消费函数,在辅助线程函数完成后调用。
         if len(self.TaskList) > 0:
            current = self.TaskList[0]
            del self.TaskList[0]
            current(callback=self.CheckNextTask)
      
         while not Done:
            # Do whatever
         wx.CallAfter(callbacK)