几乎是标题.我为OS X下载/安装了Go 1.8,但是当我去的时候
$ go version
go version go1.7.5 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
我的.bashrc如下所示
# some exports omitted
NPM_PACKAGES=/Users/<me>/.npm-packages
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
export PATH=~/Library/Python/3.4/bin:$PATH
export GOPATH=$HOME/Go
export PATH=$PATH:/usr/local/go/bin
Run Code Online (Sandbox Code Playgroud)
我的工作区位于我的主文件夹中名为"Go"的目录中.
到目前为止我检查了什么:
我检查了/ usr/local/go/bin中的文件,VERSION文件状态为"1.8",所以我知道安装成功了.
我还更新了我的终端会话,我甚至重新启动了我的电脑,以确保没有其他进程干扰它.
我使用Webstorm作为我的IDE,它正确地将1.8识别为工作版本
这不是版本号本身的错误,因为我无法使用版本1.8中引入的"NextResultSet()"sql功能
我相信上面的.bashrc文件中的罪魁祸首可能是一个错误的配置,因为只有终端卡在旧版本上,但我无法弄清楚它有什么问题.
我正在尝试为 asyncio 事件循环创建一个周期性任务,如下所示,但是我收到了“RuntimeError:无法重用已经等待的协程”异常。显然, asyncio 不允许等待与此错误线程中讨论的相同的可等待函数。这就是我尝试实现它的方式:
import asyncio
class AsyncEventLoop:
def __init__(self):
self._loop = asyncio.get_event_loop()
def add_periodic_task(self, async_func, interval):
async def wrapper(_async_func, _interval):
while True:
await _async_func # This is where it goes wrong
await asyncio.sleep(_interval)
self._loop.create_task(wrapper(async_func, interval))
return
def start(self):
self._loop.run_forever()
return
Run Code Online (Sandbox Code Playgroud)
由于我的 while 循环,相同的可等待函数 (_async_func) 将在中间有一个睡眠间隔的情况下执行。我从如何使用 asyncio 定期执行函数中获得了实现周期性任务的灵感? .
从上面提到的错误线程,我推断 RuntimeError 背后的想法是为了让开发人员不会意外地等待同一个协程两次或更多次,因为协程将被标记为完成并产生 None 而不是结果。有没有办法可以不止一次等待相同的功能?