JuliaPy / PythonCall.jl

Python and Julia in harmony.
https://juliapy.github.io/PythonCall.jl/stable/
MIT License
715 stars 61 forks source link

juliacall: Can not use `@show` and `println` in the callback function of ros.py #484

Open wly2014 opened 3 months ago

wly2014 commented 3 months ago

Affects: JuliaCall

Describe the bug When I use @show and println in the julia function which is called by the callback function of ros.py, the program becomes unresponsive.

Python test.py:

#!/usr/bin/env python3
#coding: utf-8

import rospy
import time
import numpy as np
from std_msgs.msg import Char

from juliacall import Main as jl

def solve(data):
    rospy.loginfo("==================== Start ... ======================")

    xs = jl.call_ext()

    print("len(xs) = ", len(xs))

def Solver_Interface():
    rospy.init_node('solver_interface', anonymous = True)

    rospy.Subscriber('test', Char, solve, queue_size=1)    # can not callback successfully.

    jl.include("./test.jl")

    time.sleep(1.0)
    solve(None)   # can call successfully.

    rospy.spin()

Solver_Interface()

Julia test.jl:

function call_ext()

    @show "Hello"
    @show "World"
    return [1,2,3]
end

Run the Python python test.py in a terminal. Run rostopic pub /test std_msgs/Char "data: 0" in a new terminal to do ros subscriber's callback. The text printed in the terminal is:

$ python test.py 
[INFO] [1711030056.700593]: ==================== Start ... ======================
"Hello" = "Hello"
"World" = "World"
len(xs) =  3
[INFO] [1711030086.854242]: ==================== Start ... ======================
"Hello" = 

Finally, Hello is not printed completely, the this terminal becomes unresponsive.