Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
I installation
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 19
    • Issues 19
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 1
    • Merge requests 1
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • CCThomX
  • installation
  • Issues
  • #11

Closed
Open
Created May 22, 2019 by MARRUCHO Jean-Claude@marruchoDeveloper

installation de libzmq

Contexte

En 2019, @marrucho a rencontré un problème de blocage des événements au bout de quelques minutes, dans un programme qui souscrit des événements sur des Device Proxy différents.

1. Comment reproduire le problème ?

Démarrer ce script python côté subscriber (2 Device Proxy avec 2 Callback appelées avec la méthode push_event(), 2 souscriptions d'event) :

import PyTango,time
mybool=1

devtangotestdoublew='sys/tg_test/1'
dptangotestdoublew=PyTango.DeviceProxy(devtangotestdoublew)

devtangotestshort='sys/tg_test/jcm'
dptangotestshort=PyTango.DeviceProxy(devtangotestshort)

class CBTANGOTESTDOUBLEW():
   def push_event(self,event):
     print ("           tangotest1: ",event.attr_value.value)
   time.sleep(0.1)

class CBTANGOTESTSHORT():
   def push_event(self,event):
     print ("tangotestjcm: ",event.attr_value.value)
   time.sleep(0.1)

cbtangotestdoublew=CBTANGOTESTDOUBLEW()
evttangotestodublew=dptangotestdoublew.subscribe_event('double_scalar_w',PyTango
.EventType.CHANGE_EVENT,cbtangotestdoublew)

cbtangotestshort=CBTANGOTESTSHORT()
evttangotestshort=dptangotestshort.subscribe_event('short_scalar_w',PyTango.Even
tType.CHANGE_EVENT,cbtangotestshort)

while mybool==1:
   time.sleep(0.1)

Démarrer ce script python côté publisher (change les valeurs des 2 attributs):

[...] [À COMPLÉTER ?]
dev='sys/tg_test/1'
dp=PyTango.DeviceProxy(dev)
devjcm='sys/tg_test/jcm'
dpjcm=PyTango.DeviceProxy(devjcm)
for i in range (0,1000000)::
    for j in range (1,10):
       dp.double_scalar_w=j
       dpjcm.short_scalar_w=j
       time.sleep(0.5)
[...] [À COMPLÉTER ?]

2. Remontée du problème

Sur le forum TANGO

Le problème vient d'un bogue connu dans certaines versions de libzmq.

3. Versions concernées

Sous Debian 9, dans Tango 9.2, libtango9 installe la version de libzmq 4.2.1, qui dysfonctionne avec cpptango 9.2.5 installé.

Dans ce système (avec cette version de cpptango), il ne faut pas utiliser les versions de libzmq 4.2.0 et 4.2.1

Le problème est résolu dans Debian 10, qui intègre libzmq 9.3.1.

4. Comment corriger le bug ?

2 solutions existent:

  1. mettre à jour Tango en version 9.3 : si on n'utilise pas Tango 9.3.0, ça ne fonctionne plus quand le nombre d'event atteint 1000 dans un client qui a souscrit des events sur plusieurs serveurs.

    Il faut installer et compiler cppTango 9.3.3 ET une version de libzmq telle que libzmq < 4.2.0 OU libzmq >= 4.2.2

  2. changer la version de libzmq, en installant une version >= 4.3.1 :

    git clone -b v4.3.1 https://github.com/zeromq/libzmq.git
    sudo apt install libtool     # nécessaire pour autogen
    sudo apt install autoconf    # nécessaire pour autogen
    ./autogen.sh
    ./configure
    make
    sudo make install

    Les .so du paquet libzmq5 dans 'stretch' pour l'architecture 'amd64' se trouvent par défaut dans /usr/lib/x86_64-linux-gnu. Le make install génère les .so dans /usr/local/lib

    C'est cette version qui a été mise en place sur ThomX (serveur ? client ?).

    Pour exécuter un programme C++ ou Python en utilisant cette version, il faut configurer dans un shell une variable d'environnement :

    # bibliothèques partagées (libzmq)
    ## pour les serveurs
    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    ## pour les clients, qui ont accès à `/data/shared`
    export LD_LIBRARY_PATH=/data/shared/lib:$LD_LIBRARY_PATH
Edited Jun 22, 2022 by Philippe Gauron
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking