Python中的线程优先级

时间:2015-06-13 23:05:31

标签: python multithreading pthreads python-multithreading thread-priority

对于music sampler,我有两个主线程(使用threading):

  • 线程#1在需要时实时从磁盘中读取文件的声音(例如:当我们按下MIDI键盘上的C#3时,我们需要播放C #3.wav尽快!)或来自RAM,如果此声音已经加载到RAM中

  • 线程#2将所有文件一个接一个地预加载到RAM中。

线程#2应该在后台完成,仅在空闲时间期间完成,但不应该阻止线程#1快速完成其工作。

简而言之,线程#1应该比线程#2具有更高的优先级。

如何使用threading或任何其他Python线程管理模块执行此操作?或者是否可以使用pthread_setschedparam?怎么样?

1 个答案:

答案 0 :(得分:0)

我不是一个大专家,但我会像这样处理这个问题:

#!/usr/bin/python2.7
# coding: utf-8

import threading, time

class Foo:

    def __init__(self):

        self.allow_thread1=True
        self.allow_thread2=True
        self.important_task=False

        threading.Thread(target=self.thread1).start()
        threading.Thread(target=self.thread2).start()


    def thread1(self):

        loops=0
        while self.allow_thread1:


            for i in range(10):
                print ' thread1'
                time.sleep(0.5)


            self.important_task=True

            for i in range(10):
                print 'thread1 important task'
                time.sleep(0.5)

            self.important_task=False


            loops+=1

            if loops >= 2:
                self.exit()


            time.sleep(0.5)


    def thread2(self):
        while self.allow_thread2:
            if not self.important_task:
                print ' thread2'

            time.sleep(0.5)

    def exit(self):
        self.allow_thread2=False
        self.allow_thread1=False
        print 'Bye bye'
        exit()


if __name__ == '__main__':

    Foo()

简而言之,我将thread2处理thread1。如果thread1忙,那么我们暂停thread2

请注意,我添加loops只是为了杀死示例中的线程,但在实际情况下,在关闭程序时将调用exit函数。 (如果你的主题总是在后台运行)