Python 中的线程优先级



对于音乐采样器,我有两个主要线程(使用threading):

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

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

线程 #

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

简而言之,线程 #1 的优先级应该比线程 #2 高得多。

如何使用threading或任何其他Python线程管理模块来做到这一点?或者pthread_setschedparam有可能吗?如何?

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

#!/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()

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

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

相关内容

  • 没有找到相关文章

最新更新