I know in pytest-timeout I can specify timeout for each testcase but single failure terminates whole test run instead failing the slacking off testcase.
Am I forced to make my own solution of this or there are ready-to-use tools which provide that?
This has been fully supported by pytest-timeout right from the beginning, you want to use the signal method as described in the readme of pytest-timeout.  Please do read the readme carefully as it comes with some caveats.  And indeed it is implemented using SIGALRM as the other answer also suggests, but it already exists so no need to re-do this.
pytest-timeout - fail test instead killing whole test run