I'm using PyCall to retrieve a vector of floats from an external 
spectrometer (a gizmo that measures light intensities per wavelength). I 
have it all set up in scheduled tasks with channels as the containers for 
the intensities and the python module I'm using is from [Andreas 
Poehlmann](https://github.com/ap--/python-seabreeze) (see below for code). 

One important piece of information is the integration time (similar to the 
shutter speed in a camera): after I set the integration time the 
spectrometer start sampling the spectra at that frequency. When I try to 
retrieve the intensities it will spit them out only when one cycle ends. 
This means that when I try to run the function that retrieves the 
intensities it can take anything from 0 to integration-time seconds. 

Here's the weird thing: 
When I run my code the REPL becomes non-responsive for integration-time 
seconds, so if I try to type some text, the letters get typed in only one 
letter at an integration-time (note that CPU usage is less than 3%)... But, 
if I replace the function that retrieves the intensities with some mock 
function that `sleep`s for a random amount of time and returns a (equally 
long) vector of random floats, the REPL jitter is gone..! 

I've stipped down my code to the following but the above described behavior 
is still happening: 

```Julia
using PyCall
@pyimport seabreeze
seabreeze.use("pyseabreeze")
@pyimport seabreeze.spectrometers as sb
devices = sb.list_devices()
S = sb.Spectrometer(devices[1])
S[:integration_time_micros](300000)
c0 = Channel{Array{Float64,1}}(1)
function fetchI()
while true
y = S[:intensities]()
put!(c0,y)
end
end
function plotit()
while true
take!(c0)
end
end
@schedule fetchI()
@schedule plotit()
```
and if I replace the 11th line (`y = S[:intensities]()` in `fetchI()`) with 
`y = mockfunction()`, where:
```julia
function mockfunction()
sleep(rand()*IT*1e-6)
return rand(2048)
end
```
then the REPL becomes responsive again.

Other than understanding what is going on here, I'd love to know how to get 
my snappy REPL back... 

Reply via email to