Julia 的非阻塞读取
Non blocking reads with Julia
我想在不阻塞主线程的情况下读取用户输入,就像 conio.h
中的 getch()
函数一样。在 Julia 中可以吗?
我试过 @async
,但看起来我的输入没有被读取,尽管主线程没有被阻塞。
问题,我认为,要么你是 运行 在全局范围内,这使得 @async
创建它自己的局部变量(当它读取时,它读入另一个范围内的变量)或者您使用的是旧版本的 Julia。
以下示例以 non-blocking 的方式从 STDIN
中读取一个整数。
function foo()
a = 0
@async a = parse(Int64, readline())
println("See, it is not blocking!")
while (a == 0)
print("")
end
println(a)
end
以下两个示例使用数组在全局范围内完成工作。您可以对其他类型的可变对象执行相同的操作。
数组示例:
function nonblocking_readInt()
arr = [0]
@async arr[1] = parse(Int64, readline())
arr
end
r = nonblocking_readInt() # is an array
println("See, it is not blocking!")
while(r[1] == 0) # sentinel value check
print("")
end
println(r[1])
我想在不阻塞主线程的情况下读取用户输入,就像 conio.h
中的 getch()
函数一样。在 Julia 中可以吗?
我试过 @async
,但看起来我的输入没有被读取,尽管主线程没有被阻塞。
问题,我认为,要么你是 运行 在全局范围内,这使得 @async
创建它自己的局部变量(当它读取时,它读入另一个范围内的变量)或者您使用的是旧版本的 Julia。
以下示例以 non-blocking 的方式从 STDIN
中读取一个整数。
function foo()
a = 0
@async a = parse(Int64, readline())
println("See, it is not blocking!")
while (a == 0)
print("")
end
println(a)
end
以下两个示例使用数组在全局范围内完成工作。您可以对其他类型的可变对象执行相同的操作。 数组示例:
function nonblocking_readInt()
arr = [0]
@async arr[1] = parse(Int64, readline())
arr
end
r = nonblocking_readInt() # is an array
println("See, it is not blocking!")
while(r[1] == 0) # sentinel value check
print("")
end
println(r[1])