go-python / go-python/gopy

callbacks of python methods across threads doesn't work

Offen
#187 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Go
Sterne
2.3k
Forks
136
Ø Merge
14 Min.
Gemergte PRs (30 T.)
2

Beschreibung

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.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.