从线程段运行Psychopy窗口

奥丁格

我试图从一个单独的线程运行Psychopy窗口,并控制另一个线程在其上显示的内容,但是我得到的只是致命Python错误。

这是一个较小的示例脚本,其产生的结果与我的较大示例脚本相同

from threading import Thread
from psychopy import visual, core
import time

class ThreadTest(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.text='Test'
        self.running = 1
        self.start()
        print 'doing stuff'

    def run(self):
        win = visual.Window()

        msg = visual.TextStim(win, text=self.text)
        while self.running:
            msg.setText(self.text)
            msg.draw()
            win.flip()
            print 'Drawing...'
            core.wait(2)

        win.close()
        print 'Stopping thread'

    def setText(self, text):
        self.text=text

    def stopTest(self):
        self.running = 0


def main():
    tt = ThreadTest()
    time.sleep(3)
    tt.setText('Test2')
    time.sleep(3)
    tt.stopTest()
    print 'Stopping main thread'

if __name__ == '__main__':
    main()

和输出

python testy.py 
doing stuff
Fatal Python error: (pygame parachute) Segmentation Fault
Aborted (core dumped)

这将创建Psychopy窗口,但无法在其上显示任何文本,然后崩溃。我也尝试过在其中创建窗口,__init__()但这也不起作用。

乔恩

这似乎是来自pyglet的文本对象的问题,可能会干扰pyglet线程。下面的代码实际上有效(令我惊讶)!

但是您强烈建议不要这样做,并且不建议这样做。OpenGL调用(处理所有渲染)不是线程安全的,不应从主线程以外的任何其他位置调用。

基本上,您是自己一个人在这里!;-)

from threading import Thread
from psychopy import visual, core
import time

class ThreadTest(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.ori=0
        self.running = 1
        print 'initialised'

    def run(self):
        win = visual.Window()
        print 'created window'
        stim = visual.PatchStim(win)
        print 'created stim'
        while self.running:
            stim.ori = self.ori
            stim.draw()
            win.flip()
            print '.',
            core.wait(0.01)

        print 'Stopping auxil thread'

    def setOri(self, ori):
        self.ori=ori

    def stopTest(self):
        self.running = 0


def main():
    tt = ThreadTest()
    tt.start()
    for frameN in range(180):
        tt.setOri(frameN)
        time.sleep(0.01)
    tt.stopTest()
    print 'Stopping main thread'

if __name__ == '__main__':
    main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

退出PsychoPy窗口

来自分类Dev

PsychoPy重新打开窗口

来自分类Dev

Psychopy 脚本冻结窗口和对话 guis

来自分类Dev

Swing中的JFrame窗口是否在各自的线程上运行?

来自分类Dev

运行后台线程时了解Tkinter窗口响应能力

来自分类Dev

PyQt线程在窗口关闭后仍在运行

来自分类Dev

如何将窗口运行到新任务中并保持其主线程运行

来自分类Dev

如何将窗口运行到新任务中并保持其主线程运行

来自分类Dev

限制在Java中运行某些代码段的线程数的最佳方法?

来自分类Dev

在特定时间段后在线程上运行应用程序

来自分类Dev

在与Excel不同的线程中运行的异步WPF窗口中的ExcelDna C API调用

来自分类Dev

如何正确销毁从另一个线程运行的窗口?

来自分类Dev

获取特定段窗口的尺寸

来自分类Dev

C ++:如果发生段错误或类似事件,是否有办法杀死单线程但保持应用程序运行?

来自分类Dev

如何强制一段代码在线程内不间断运行(避免被操作系统抢占)

来自分类Dev

Java线程对象与运行线程

来自分类Dev

如何在不阻止正在运行的线程的情况下创建应用程序全局进度窗口?

来自分类Dev

从子线程绘图到窗口

来自分类Dev

简单的多线程程序段错误

来自分类Dev

简单的多线程程序段错误

来自分类Dev

PySide,pySerial和线程导致段错误

来自分类Dev

如何使PsychoPy对象保持可见。Window是Windows 7上最顶层(活动的)窗口?

来自分类Dev

线程开始运行并终止

来自分类Dev

线程方法未运行?

来自分类Dev

线程池顺序运行?

来自分类Dev

从WAR自动运行线程

来自分类Dev

运行并发线程执行

来自分类Dev

Python开始运行线程

来自分类Dev

Python线程无法运行

Related 相关文章

热门标签

归档