[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/pythonnet/pythonnet/net8.0/src/testing/threadtest.cs [Back]  [Original]

using System;
using Python.Runtime;

namespace Python.Test
{
    /// 
    /// Supports CLR threading / reentrant unit tests.
    /// 
    public class ThreadTest
    {
        private static PyObject module;

        private static string testmod =
            "import clr\n" +
            "from Python.Test import ThreadTest\n" +
            "\n" +
            "def echostring(value):\n" +
            "    return value\n" +
            "\n" +
            "def echostring2(value):\n" +
            "    return ThreadTest.CallEchoString(value)\n" +
            "\n";


        /// 
        /// This method calls back into the CPython runtime - tests
        /// call this from Python to check that we don't hang on
        /// nested transitions from managed to Python code and back.
        /// 
        public static string CallEchoString(string arg)
        {
            using (Py.GIL())
            {
                if (module == null)
                {
                    module = PyModule.FromString("tt", testmod);
                }
                PyObject func = module.GetAttr("echostring");
                var parg = new PyString(arg);
                PyObject temp = func.Invoke(parg);
                var result = (string)temp.AsManagedObject(typeof(string));
                func.Dispose();
                parg.Dispose();
                temp.Dispose();
                return result;
            }
        }

        public static string CallEchoString2(string arg)
        {
            using (Py.GIL())
            {
                if (module == null)
                {
                    module = PyModule.FromString("tt", testmod);
                }

                PyObject func = module.GetAttr("echostring2");
                var parg = new PyString(arg);
                PyObject temp = func.Invoke(parg);
                var result = (string)temp.AsManagedObject(typeof(string));
                func.Dispose();
                parg.Dispose();
                temp.Dispose();
                return result;
            }
        }
    }
}

Web Proxy Viewer  |  New URL  |  Original Page