对于音乐采样器,我有两个主要线程(使用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 函数。(如果您的线程始终在后台运行)