Rocket U2 | UniVerse & UniData

 View Only
  • 1.  Multithreading in Python

    Posted 12 days ago

    Hello all

    Is there a way to run a slow u2py operation in background?

    I ran some tests and the Universe Python seems to not support parallel execution due to GIL, so I discarded Python's native threads.

    With async routines the execution gets blocked on u2py calls:

    BASIC code:

    >CT UP ADORMIR

         ADORMIR
    0001 SLEEP 50
    0002 CRT 'me despierto'
    0003 RETURN
    0004
    >

    Python code:

    import asyncio
    import time
    from datetime import datetime
    import u2py
    MAX_TIME = 60*2
    INTERVALO_LARGO = 30
    INTERVALO_CORTO = 1


    async def corutina_rapida():
        i = 0
        while i < MAX_TIME/INTERVALO_CORTO:
            print(f'{i} - {datetime.now()} - HOLA')
            await asyncio.sleep(INTERVALO_CORTO)
            i += 1
        return 'OK'


    async def corutina_dormilona_universe():
        i = 0
        c = u2py.Command('ADORMIR')
        while i < MAX_TIME/INTERVALO_LARGO:
            r = c.run()
            print(f'{i} - {datetime.now()} - A DORMIR - {r}')
            i += 1
            await asyncio.sleep(0)
        return 'OK'


    async def lanza_corutinas():    
        lp = u2py.Command('LOGTO POSVENTA5').run()
        await asyncio.gather(corutina_rapida(), corutina_dormilona_universe())


    def main_test():    
        asyncio.run(lanza_corutinas())

    When the u2py Command is running the other coroutine is blocked.

    Is there a way to run this commands so that they don't block execution?



    ------------------------------
    Héctor Cortiguera
    Quiter Servicios Informaticos SL
    ------------------------------


  • 2.  RE: Multithreading in Python

    ROCKETEER
    Posted 12 days ago

    Hector,

    Doing a sleep may not be the best test of how affective threading could be in Python.  

    see: https://stackoverflow.com/questions/92928/time-sleep-sleeps-thread-or-process#93179

    Are you working on external Python code that works with u2py, or are you going into U2 first and calling Python.

    If the external Python calling U2, I would suggest you look at uopy.



    ------------------------------
    Mike Rajkowski
    MultiValue Product Evangelist
    Rocket Internal - All Brands
    US
    ------------------------------



  • 3.  RE: Multithreading in Python

    Posted 11 days ago

    Hi Mike

    It's the second case, I'm using u2py because it's code intented to be run from U2. I don't want to do another login with uopy when I already have a working session in u2py.

    As you can see in the example, I'm not using time.sleep, but the asyncio version.  My problem is that the execution gets blocked for both asyncio threads while the u2py call is blocked.

    I change the prints in the u2py coroutine


    async def corutina_dormilona_universe():
        i = 0
        c = u2py.Command('ADORMIR')
        while i < MAX_TIME/INTERVALO_LARGO:
            print(f'{i} - {datetime.now()} - A DORMIR')
            r = c.run()
            print(f'{i} - {datetime.now()} - ME DESPIERTO')
            i += 1
            await asyncio.sleep(0)
        return 'OK'

    >PYTHON
    python> from test_async import main_test
    python> main_test()
    -------------
    * POSVENTA5 *
    -------------

    Hola hector (Pid: 2121618) Actualmente estas en la cuenta: POSVENTA5 Ruta: [/u2/quiter/POSVENTA5]
    Hay 2 usuarios conectados de un total de 50

    0 - 2024-09-26 08:29:42.083501 - HOLA
    0 - 2024-09-26 08:29:42.083903 - A DORMIR
    me despierto
    0 - 2024-09-26 08:30:32.084532 - ME DESPIERTO
    1 - 2024-09-26 08:30:32.084728 - A DORMIR
    me despierto
    1 - 2024-09-26 08:31:22.085280 - ME DESPIERTO
    2 - 2024-09-26 08:31:22.085455 - A DORMIR
    me despierto
    2 - 2024-09-26 08:32:12.086017 - ME DESPIERTO
    1 - 2024-09-26 08:32:12.086198 - HOLA
    3 - 2024-09-26 08:32:12.086313 - A DORMIR

    While u2py is running the command the second coroutine is not executing.



    ------------------------------
    Héctor Cortiguera
    Quiter Servicios Informaticos SL
    ------------------------------



  • 4.  RE: Multithreading in Python

    Posted 5 days ago
    Edited by Atul kakade 5 days ago

    Just checking if you found a way to run multi threaded with out blocking. we are trying to write a  program which may have same challenges . we are hoping to create a  python service running that connect to  mutliple gcloud pubsub topic and write async call back function process the incoming messages in our existing universe subroutines.  



    ------------------------------
    Atul kakade
    Tailored Brands
    ------------------------------