Есть некоторый код, который в цикле посылает команды устройству, а по исполнении команды и фиксированному таймауту получает данные с сенсора. Данные динамически отображаются через matplotlib. Что то вроде:
fig = plt.figure()
ax1 = fig.add_subplot(111)
...
while 1:
send_command(...)
#timeout
...
data = get_data(...)
ax1.plot(data)
plt.draw()
Естественно, во время выполнения команд и таймаута окно с графиком фризится. Можно ли как ни будь запустить его в отдельном потоке/процессе, так что бы окно графопостроителя оставалось интерактивным?
Пускай есть некоторый шаблонный класс для представления массива. И есть члены шаблонного класса, например A, B, C, D, .. совпадающие по количеству элементов. В шаблоне реализованы арифметические операции +=, -=, *=, /= для операций с парами (массив, массив) и (массив,скаляр) внутри они представляют из себя обычные циклы (в общем случае распараллеленные), а так же оператор присваивания и конструктор копирования.
Вопрос, как прегрузить обычные бинарные операции так, что бы избежать выделения памяти под промежуточные члены класса и как спрятать всю цепочку вычислений внутрь одного цикла?
Например, A = C+B*(D/2.0f). Если считать влоб, то получается 4 цикла и 3 выделения памяти, в то же время, если как-то реализовать ленивость, то достаточно собрать цепочку вычислений элемента и посчитать всё внутри одного цикла. Как такое правильно сделать?
Хочу сделать управление для осциллографа DSO-X 3034A через usb. Установил pyvisa, pyvisa-py, libvisa0. dmesg показывает, что осциллограф подключен:
[ 1912.431536] usb 3-11.4: new high-speed USB device number 9 using xhci_hcd
[ 1912.522143] usb 3-11.4: New USB device found, idVendor=0957, idProduct=17a4
[ 1912.522144] usb 3-11.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1912.522145] usb 3-11.4: Product: DSO-X 3034A
[ 1912.522146] usb 3-11.4: Manufacturer: Keysight Technologies
[ 1912.522147] usb 3-11.4: SerialNumber: MY53280538
виза тоже:
~ python3 -m visa info
...
PyVISA Version: 1.8
Backends:
ni:
Version: 1.8 (bundled with PyVISA)
#1: /usr/lib/x86_64-linux-gnu/libvisa.so.0.0.0:
found by: auto
bitness: 64
Could not get more info:
VI_ERROR_NSUP_ATTR (-1073807331): The specified attribute is not defined or supported by the referenced object.
py:
Version: 0.2
ASRL INSTR:
Please install PySerial to use this resource type.
No module named 'serial'
GPIB INSTR:
Please install linux-gpib to use this resource type.
No module named 'gpib'
USB RAW: Available via PyUSB (1.0.0). Backend: libusb1
USB INSTR: Available via PyUSB (1.0.0). Backend: libusb1
TCPIP INSTR: Available
TCPIP SOCKET: Available
Однако, когда пытаюсь получить список устройств через ресурс-менеджер, то на выходе пусто:
In [7]: rm = visa.ResourceManager()
In [8]: rm.list_resources()
Out[8]: ()
А pyvisa вообще валится:
In [9]: rm = visa.ResourceManager('@py')
In [10]: rm.list_resources()
---------------------------------------------------------------------------
VisaIOError Traceback (most recent call last)
<ipython-input-10-a14d33fc6d00> in <module>()
----> 1 rm.list_resources()
/usr/local/lib/python3.4/dist-packages/pyvisa/highlevel.py in list_resources(self, query)
1558 """
1559
-> 1560 return self.visalib.list_resources(self.session, query)
1561
1562 def list_resources_info(self, query='?*::INSTR'):
/usr/local/lib/python3.4/dist-packages/pyvisa-py/highlevel.py in list_resources(self, session, query)
236 return resources
237
--> 238 raise errors.VisaIOError(errors.StatusCode.error_resource_not_found.value)
239
240 def read(self, session, count):
VisaIOError: VI_ERROR_RSRC_NFOUND (-1073807343): Insufficient location information or the requested device or resource is not present in the system.
Есть некоторый код на С, который на входе и выходе принимает структуры фиксированного размера (пакеты для работы с удалённым устройством). С помощью swig сделан доступ к ним из python-кода. Для отправки пакетов по сети и чтения ответа yнужендоступ к их байтовому представлению? Как это сделать?
Хочу распарсить csvшку не полезными данными. Читаю так:
with open("levels.csv", "r") as f:
for line in f.readlines():
print("int <<"+line.strip()+">>")
words = line.strip().split(";")
print("out <<"+str(words)+">>")
но на выходе получаю, например:
int «5p5(2P°3/2)16d ; 2[5/2]° ;0; 2 ; 12.0561788 »
out «['5p5(2P\xc2\xb03/2)16d\xc2\xa0', '\xc2\xa02[5/2]\xc2\xb0\xc2\xa0', '0', '\xc2\xa02\xc2\xa0', '\xc2\xa0\xc2\xa012.0561788\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0']»
WAT, split(";") ломает мой замечательный юникод, что за фигня?
subj. Предлагаю по возможности поддержать их, благо, проект очень хороший. Линакс здесь при том, что многие русскоязычные пользователи линакса её читают.
Модеры, не удаляйте сразу, дайте повисеть немного.
В своё время, успешно играл в эту игру под dosemu. Сейчас, решил переиграть, но бинарник падает с ошибкой «Error: Detection System Failed To Find Hardware». А правки в конфиг из той темы протухли. Под dosbox всё работает, но слишком уж тормозит. Кто ни будь знает как её запустить?
The following packages have unmet dependencies:
cuda : Depends: cuda-8-0 (>= 8.0.61) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Намертво застрял на боссе-медведе. Медведь атакует игрока, монстры атакуют медведя. Медведь умирает, монстры становятся бессметрыми, а проход по прежнему заблокирован. Что вообще там нужно делать?
from multiprocessing import Pool
def foo(x,y,z):
print(x,y,z)
def bar():
pool = Pool() #set number of processes
pool.map(lambda x: foo(x,"a","b"), range(10))
if __name__ == '__main__':
bar()
Приводит к
_pickle.PicklingError: Can't pickle <function bar.<locals>.<lambda> at 0x7f837d7da840>:
attribute lookup <lambda> on __main__ failed
Соответственно, помогает только создание отдельной функции в глобальном нэймспэйсе. Как это обойти и ЧЯДНТ?
1. Алгоритм предполагает, что количество точек — степерь двойки, но например, в numpy он прекрасно работает с произвольным количеством точек. Как это сделано?
2. Как его лучше реализовать без динамичного выделения памяти и рекурсии?
Рисую что-то вроде http://pix.academ.info/images/img/2017/04/20/0c44aed3f51095b36dbd6d6aeb74c9e5.... У всех графиков, общая ось x, и у всех кроме нижнего общая ось y. Хочется переместить colorbarы на левую сторону, но тогда подписи к делениям оказываются справа. Как их переместить налево и, желательно повернуть на 90 градусов? Colorbarы рисую простым cbar = plt.colorbar(im, cax=cax). В документации не нашёл ничего похожего, есть только параметр «orientation: vertical or horizontal», но это не то.
Я копировал некоторые файлы с локальной машины на удалённый сервер. Из за проблем со связью копирование не удалось, а на удалённой машине появилось несколько неубиваемых процессов. Теперь туда вообще ничего не получается скопировать — и scp, и sshfs намертво зависают. Что можно сделать без перезагрузки?
Как его сменить? В настройках нигде опции не нашёл, а играть так невозможно, впечатление будто бинокль на голову одели — через 5 минут устают глаза и начинает болеть голова.