gopy icon indicating copy to clipboard operation
gopy copied to clipboard

callbacks of python methods across threads doesn't work

Open rcoreilly opened this issue 6 years ago • 0 comments

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):

	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.

rcoreilly avatar Jun 07 '19 07:06 rcoreilly