Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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/0/windows/17.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/Psychopy WindowsError:异常:访问冲突读取0x00000010_Python_Windows_Python 2.7_Psychopy - Fatal编程技术网

Python/Psychopy WindowsError:异常:访问冲突读取0x00000010

Python/Psychopy WindowsError:异常:访问冲突读取0x00000010,python,windows,python-2.7,psychopy,Python,Windows,Python 2.7,Psychopy,当我试图在我的程序中调用此函数时,如果我运行程序需要很长时间,它将调用错误(标题中)。似乎花在程序上的时间超过5分钟会导致程序崩溃 视窗8 Python 2.7 心理变态1.82.02 def WaitForKeyInput(): timer= core.CountdownTimer(5) trialClock.reset() text='...' #until return pressed, listen for letter keys & add t

当我试图在我的程序中调用此函数时,如果我运行程序需要很长时间,它将调用错误(标题中)。似乎花在程序上的时间超过5分钟会导致程序崩溃

视窗8 Python 2.7 心理变态1.82.02

 def WaitForKeyInput():
    timer= core.CountdownTimer(5)
    trialClock.reset()
    text='...'
    #until return pressed, listen for letter keys & add to text string
    while event.getKeys(keyList=['return'])==[]:
        letterlist=event.getKeys(keyList=['0', '1', '2', '3', '4',  '5' , '6', '7', '8', '9','backspace','q'])
        color = 'black'
        if timer.getTime() >= 3:
            color = 'green'
        elif timer.getTime() >=0:
            color = 'yellow'

        elif timer.getTime() <0:
            color = 'red'
        feedback = visual.Rect(mywin, width= 200,height = 200, pos = (0,-100), lineWidth=5.0, lineColor = color)
           betAsk.draw()
           feedback.draw()
          response = visual.TextStim(mywin, height=36,text=text,color="white",pos=(0,-100))
        if text != '...':
            response.draw()
        mywin.flip()
        for l in letterlist:
             if l == 'q':
                 core.quit()
            #if key isn't backspace, add key pressed to the string
            if l !='backspace':
                if text =="...":
                    text=l
                    pressedkeys=l
                else:
                   text+=l
                   pressedkeys+=(";" + l)
                #otherwise, take the last letter off the string
                elif len(text)>0:
                    text=text[:-1]
                    pressedkeys+=(";backspace")
        event.clearEvents()
def waitforkeyinport():
定时器=核心。倒计时(5)
trialClock.reset()
text=“…”
#在按下return键之前,先听字母键并添加到文本字符串中
而event.getKeys(keyList=['return'])=[]:
letterlist=event.getKeys(keyList=['0','1','2','3','4','5','6','7','8','9','backspace','q'])
颜色=‘黑色’
如果timer.getTime()>=3:
颜色=‘绿色’
elif timer.getTime()>=0:
颜色=‘黄色’

elif timer.getTime()您应该查看一些PsychoPy演示,以了解如何使用它的类。一般的方案是,在可能的情况下,只需创建一次对象(例如,
feedback=visual.Rect(…)
)。然后,只需根据需要更新其属性

例如,在这种情况下,在循环的每次迭代中,您都不必要地重新创建
反馈。相反,在循环开始之前只实例化它一次,然后只需调用
feedback.lineColor=color
来更新该属性,然后调用
feedback.draw()

为什么??至少有两个原因:

  • 与仅仅更新已经存在的对象的属性相比,对象创建通常需要一段非实质性的时间。在这样的代码中,在每次屏幕刷新时都会运行,这样的对象创建实际上可能需要多次屏幕刷新,从而破坏您的计时

  • PsychoPy用于文本显示的底层
    pyglet
    库中存在内存泄漏。这很可能是造成内存异常的原因,因为您数千次地创建
    响应
    文本刺激

因此,一个解决方案是重新构造代码,以避免创建多个对象,这是一个一般原则,但也要避免这种恼人的文本内存泄漏,而PsychoPy无法真正控制这种泄漏


您还应该避免在
状态下使用
event.getKeys()
。紧接着是另一个调用
event.getKeys()
。这将再次清除按键队列,使您可能经常错过按键,如果您在每个循环中仅检查一次,则可能会检测到按键。另外,
event.clearEvents()
可能是不必要的。

您应该查看一些PsychoPy演示,以了解如何使用它的类。一般的方案是,在可能的情况下,只需创建一次对象(例如,
feedback=visual.Rect(…)
)。然后,只需根据需要更新其属性

例如,在这种情况下,在循环的每次迭代中,您都不必要地重新创建
反馈。相反,在循环开始之前只实例化它一次,然后只需调用
feedback.lineColor=color
来更新该属性,然后调用
feedback.draw()

为什么??至少有两个原因:

  • 与仅仅更新已经存在的对象的属性相比,对象创建通常需要一段非实质性的时间。在这样的代码中,在每次屏幕刷新时都会运行,这样的对象创建实际上可能需要多次屏幕刷新,从而破坏您的计时

  • PsychoPy用于文本显示的底层
    pyglet
    库中存在内存泄漏。这很可能是造成内存异常的原因,因为您数千次地创建
    响应
    文本刺激

因此,一个解决方案是重新构造代码,以避免创建多个对象,这是一个一般原则,但也要避免这种恼人的文本内存泄漏,而PsychoPy无法真正控制这种泄漏


您还应该避免在
状态下使用
event.getKeys()
。紧接着是另一个调用
event.getKeys()
。这将再次清除按键队列,使您可能经常错过按键,如果您在每个循环中仅检查一次,则可能会检测到按键。另外,
event.clearEvents()
可能是不必要的。

谢谢Michael!我会看看那些东西。我真的很感谢你的帮助。谢谢迈克尔!我会看看那些东西。我真的很感谢你的帮助。