callbacks of python methods across threads doesn't work
- Ngôn ngữ chính
- Go
- Star
- 2.3k
- Fork
- 136
- Merge trung bình
- 14 phút
- Pull request đã merge (30 ngày)
- 2
Mô tả
It works fine for functions, just not methods. There is some ambiguity about how the self argument is handled for methods, but presumably that is the crux of the problem.
Tried the following (see bind/symbols.go):
```Go
bstr := fmt.Sprintf("var %s *C.PyObject\n", varnm)
bstr += fmt.Sprintf("_pyargstidx := 0\n")
bstr += fmt.Sprintf("_pyargidx := C.long(0)\n")
if methvar != "" {
bstr += fmt.Sprintf("if C.gopy_method_check(%s) != 0 {\n", methvar)
bstr += fmt.Sprintf("\tC.gopy_incref(%s)\n", methvar)
bstr += fmt.Sprintf("\t%s = C.PyTuple_New(%d)\n", varnm, sz+1)
bstr += fmt.Sprintf("\tC.PyTuple_SetItem(%s, 0, C.PyMethod_Self(%s))\n", varnm, methvar)
bstr += fmt.Sprintf("\t_pyargstidx = 1\n")
bstr += fmt.Sprintf("\t%[1]s = C.PyMethod_Function(%[1]s)\n", methvar)
bstr += fmt.Sprintf("} else {\n")
bstr += fmt.Sprintf("\t%s = C.PyTuple_New(%d)\n", varnm, sz)
bstr += fmt.Sprintf("}\n")
}
```
per this: https://www.reddit.com/r/Python/comments/3618cd/calling_back_python_instance_methods_from_c/
but didn't have any different results relative to just the basic CallObject version.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu với bind/symbols.go và lần theo cách các callback cho hàm và phương thức Python được tạo ra, bao gồm việc xử lý đối số self và lời gọi giữa các thread. Tái hiện sự khác biệt đã được báo cáo giữa hàm và phương thức, sau đó xác minh rằng các callback của phương thức thực thể Python hoạt động giữa các thread mà không gây hồi quy cho các callback của hàm.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- go, python
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100